我正在开发移动应用计算器 我试图通过使用“bsh”库来评估字符串作为数学方程式。 成功地,我导入了库并进行了编译。
当我尝试在等号下实现这个部分时,我一直都是null
equSign.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String value = "";
Double result= null;
Interpreter interpreter = new Interpreter();
try {
result = (Double)interpreter.eval(input);
} catch (EvalError evalError) {
evalError.printStackTrace();
}
value = String.valueOf(result);
text.setText(value);
}
});
每次用户pree 0到9的数字或。或任何操作+ / - * 它将被添加到输入变量
Num0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
text.setText(text.getText()+"0");
input = input + "0";
}
});
此功能适用于所有其他按钮
我也使用了try catch来捕获错误
答案 0 :(得分:2)
您的问题似乎是您正在混合java类和'bsh'解释器的变量。基本上bsh不能直接访问你的java变量,你需要在解释器中设置它们。
i.eval(input)
可能是您打算做的。
查看http://www.beanshell.org/javadoc/bsh/Interpreter.html中的示例,了解如何使用其他功能。
答案 1 :(得分:0)
尝试下面的内容,您正在传递"输入"作为eval的一个字符串来评估它是什么,因为它只是一个字符串而不是你想要评估的实际数字表达式。
public static void bsh() throws EvalError {
String expression = "input=2+2-5";
String value = " ";
Interpreter i = new Interpreter();
try {
i.eval(expression);
} catch (EvalError evalError) {
evalError.printStackTrace();
}
value = String.valueOf((Integer)i.get("input"));
System.out.println(value);
}
Alternativley如果您想按照以下方式进行操作,可以直接从eval获取返回值,如下所示:
public static void bsh() throws EvalError {
String input = "2+2-5";
String value = " ";
Interpreter i = new Interpreter();
Integer result = null;
try {
result = (Integer)i.eval(input);
} catch (EvalError evalError) {
evalError.printStackTrace();
}
value = String.valueOf(result);
System.out.println(value);
}
希望它有所帮助。
此致
答案 2 :(得分:0)
我无法代表所有的Android代码,因为如果你的OnClick监听器等工作正常,我就无法轻易测试。但是我已经使用了使用bsh解释器的代码,如下所示,我已将其作为测试运行,并且它可以工作。我不知道你的输入字符串是什么因此我添加了一个输入字符串,你可以看到它“2.0 + 2.0-5.0”来表明它是有效的 - 注意它必须是一个双值“2.0”而不是一个整数“2 “因为您正试图在代码中检索Double结果。你应该能够采用我的方法测试它,你会发现它会起作用。
public static void bsh2() {
String input = "2.0+2.0-5.0";
String value = "";
Double result= null;
Interpreter interpreter = new Interpreter();
try {
result = (Double)interpreter.eval(input);
} catch (EvalError evalError) {
evalError.printStackTrace();
}
value = String.valueOf(result);
System.out.println(value);
}