Eval()Interprter返回null

时间:2016-02-22 00:56:36

标签: java android

我正在开发移动应用计算器 我试图通过使用“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来捕获错误

3 个答案:

答案 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);
}