JUEL математика
Я программирую сервер на Java, и мне нужно использовать математику с помощью JUEL.
Например, 2*2+2, и он выведет результат 6. Проблема в том, что он не работает.
Вот метод для математики:
public static void Math(String operation){
ValueExpression expr = f.createValueExpression(cont, "${" + operation + "}", Object.class);
out.print(expr);
}
Итак, я беру операцию как Строка "8+5+4" и распечатываю результат на консоли.
Может быть, я неправильно использую JUEL?
try{
while ((newLine = in.readLine()) != null) {
try {
Pattern patternMath = Pattern.compile("<MATH>(\\s*?)(\\d+)(\\s*?)([-+/\\*])(\\s*?)(\\d+)");
Matcher matcher = patternMath.matcher(newLine);
Pattern pattCSEN = Pattern.compile("<RU-EN>(.*)");
Matcher matCSEN = pattCSEN.matcher(newLine);
Pattern pattENCS = Pattern.compile("<EN-RU>(.*)");
Matcher matENCS = pattENCS.matcher(newLine);
if (matENCS.find()) {out.println("<TRANSLATION> " + ENGtoCZ(matENCS.group(1)));}
else if (matCSEN.find()) {out.println("<TRANSLATION> " + CZtoENG(matCSEN.group(1)));}
else if (newLine.equals("<BYE>")) {
clientSocket.close();
}
else if (matcher.find()) {
Math(newLine);
} else {
out.println("<FAIL>");
clientSocket.close();
}
}catch(Exception ex){
clientSocket.close();;
}}
} catch (Exception e) {
out.println("<FAIL>");
clientSocket.close();
}
}
1 ответ
Вот следующие строки, чтобы всегда быть уверенными в том, что они есть в вашем коде. Убедитесь, что у вас есть контекст, настроенный примерно так:
SimpleContext context = new SimpleContext();
Ваш объект выражения должен иметь класс реализуемый, что-то вроде следующего:
ExpressionFactory factory = new ExpressionFactoryImpl();
Во-вторых, поместите ваше ValueExpression в блок try, в случае, если что-то пойдет не так, вы узнаете проблему из перехваченного исключения.
Проверьте, как выражение вводится с System.out
как в:
Object display = expr.getValue(context);
System.out.println("> " + display);
Некоторая дополнительная ссылка здесь