#java
#java
Вопрос:
Вот что мне нужно сделать:
public void verifyConditionSatisfies( Boolean condition){
if (condition) {
System.out.println(condition.toString() "satisfies)//This is the part i need to get its String binding, not boolean evaluated version
}else{
System.out.println(condition.toString() " does not satisfy)
}
}
Вот предполагаемое использование:
verifyConditionSatisfies(10>9)
следует оценивать как
"10>9 satisfies"
Комментарии:
1. Это невозможно. Вам придется написать некоторый дополнительный код, чтобы зафиксировать это поведение, возможно, обернуть его в свой собственный класс.
2. Вашей функции передается логическое значение, то есть true, а не
"10>9"
3. Передаются только значения аргументов. Вам пришлось бы передавать строку отдельно.
4. Что вам нужно сделать: поймите, что вы делаете. Если вы действительно хотите напечатать «10> 9» … тогда это означает, что вы хотите иметь систему, которая понимает выражения и синтаксис. Я думаю, вам действительно следует отступить назад и провести небольшое исследование языков программирования, что они собой представляют и как они работают. И почему написание
if( a > b)
в исходном коде вовсе не является «отправной точкой» для возможности печатиa > b
какому-либо пользователю-человеку (в смысле получения фактической логики условий и превращения ее в строку).5. Логическое значение — это просто true или false. Он не сохраняет никакой памяти о том, как был получен результат true / false.
Ответ №1:
Как упоминалось в комментариях, получение логического выражения 10>9
в виде строки невозможно. Возможно, было бы проще предоставить выражение в виде строки "10>9"
.
Вот неортодоксальный способ сделать это:
public class BooleanEval {
public static void main(String[] args) throws ScriptException {
System.out.println(new BooleanEvaluation("10>9"));
System.out.println(new BooleanEvaluation("25<3"));
}
public static class BooleanEvaluation {
private static final ScriptEngine javaScriptEngine = new ScriptEngineManager().getEngineByName("JavaScript");
private String expression;
private boolean evaluation;
public BooleanEvaluation(String eval) throws ScriptException {
this.expression = eval;
this.evaluation = Boolean.parseBoolean(String.valueOf(javaScriptEngine.eval(expression)));
}
@Override
public String toString() {
String evalString = evaluation ? "satisfies" : "does not satisfy";
return expression " " evalString;
}
}
}
Выводит:
10>9 satisfies
25<3 does not satisfy
Комментарии:
1. Отличный ответ, но я думаю, вы должны хотя бы объяснить, как это работает. И какие компромиссы есть у этого решения.
Ответ №2:
Это
verifyConditionSatisfies(10>9);
эффективно оценивается как
Boolean temp = 10 > 9;
verifyConditionSatisfies(temp);
Метод не знает о том, как был вычислен его аргумент.
Последовательность символов 1, 0, >, 9 существует только в исходном коде.
Итак, ответ «нет».
Комментарии:
1. Ну, в программном обеспечении ответ в основном «да». Это просто требует тонны работы. Просто напишите небольшой интерпретатор, который понимает элементы синтаксиса и так далее. Хорошее упражнение для новичков. Может быть выполнено за 2-3 недели 😉
2. Конечно, это все просто единицы и нули, но я думаю, что это относится к категории «если вам нужно задать вопрос, то ответ фактически отрицательный».
3. Смотрите комментарий, который я поместил под вопросом 😉