【问题标题】:How can I make multiple operations work in calculator?如何在计算器中进行多项操作?
【发布时间】:2015-08-10 12:47:11
【问题描述】:

为了学习,我为安卓制作了简单的计算器,但它有问题。所有数字键都只是append 对应的数字到TextView。等于按钮执行加/减/除/乘的工作。但问题是,它一次只能做一个,如果我把加号和减号混在一起,它会崩溃。这是执行加法的等号按钮的代码:

equals = (Button) findViewById(R.id.equals);
equals.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        result.getText();
       String expression = (result.getText()).toString();

        if(expression.contains("+")){
        String[] numbers = expression.split("\\+");
        String no1 = numbers[0];
        String no2 = numbers[1];

        Double numb1 = Double.valueOf(no1);
        Double numb2 = Double.valueOf(no2);
        Double added = numb1+numb2;

        theresult = String.valueOf(added);
        result.setText(theresult);


        }
    }
});

正如您在上面看到的,出现了另一个问题。它不能处理多个+ 符号,我怎样才能让它添加 x 数量的数字?对不起,我是编程新手,我想了解它是如何工作的,而不是让它工作,所以如果可能的话也请解释一下。谢谢。

【问题讨论】:

  • 如果它崩溃了,那么最好的办法就是发布 logcat 错误。
  • 尝试输入的字符串 = result.getText().toString()。但是,如果您添加减号或除 + 以外的任何其他符号,它将不起作用
  • @Rohit5k2 好的。你认为你会通过调用这个 String.valueOf(result) 从 EditText 中获取输入的文本吗??
  • 对不起,我从上一个问题中复制了这个。我现在修好了,和老板说的一样,加了 .toString() 。它的 TextView 不是 EditText,因为 EditText 弹出的键盘很烦人,如果有人输入错误的东西会抛出异常。

标签: java android android-studio


【解决方案1】:

这最适合作为评论,我决定将其作为答案,只是为了不让它丢失,因为已经有一些答案。

看看this question;接受的答案可能不是您想要的,因为您想学习,但是 boan 的答案可能是您正在寻找的。我不会在这里复制它,因为它已经在 S.O.

【讨论】:

  • 你知道你只发布这个问题的链接吗?请在发帖前进行验证。
  • @Rohit5k2,我同意你的看法。但正如你所读到的,我在帖子中解释了原因。我没有将问题标记为重复,因为它并不是真正的重复。我什至不希望他接受这个答案。
  • @innoSPG:没关系,但我只是说你应该在发布之前验证链接。
  • 我是编程新手,boan 的回答是给有经验的。有些部分我不明白: 1.int pos = -1, c;这个逗号和c是什么意思? 2. c = (++pos < str.length()) ? str.charAt(pos) : -1; 不明白这个 3. 更多:(
  • @ShahbazTalpur, int pos = -1, c; 只是在一行上定义了 2 个变量;变量pos 和变量c;在 javaworld 中,在同一个语句中定义 2 个变量并不是很常见的做法,但如果你愿意,你可以这样做..
【解决方案2】:

利用栈进行多重操作你可以使用这个算法http://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html

【讨论】:

  • 请避免仅链接的答案。
  • 我猜这是 C++ 的链接建议?
  • 是的,但您可以通过该代码轻松实现算法
【解决方案3】:

如果它崩溃了,那么最好也发布 logcat 错误。

现在的问题;您仅基于 + 分隔表达式。所以如果你添加- 那么数组的第二部分将包含- 也不能转换成双精度。在这里你得到了错误。

所以最好的办法是根据+-*/ 等所有表达式来分隔仅数字部分。将所有表达式分离后,只有您可以将剩余的值转换为字符串并根据各自的表达式执行操作。

您必须为此编写一些代码。

现在可以帮助您的资源。 (第二种是较短的方法)

  1. Evaluating a math expression given in string form

  2. How to parse a mathematical expression given as a string and return a number?

【讨论】:

  • 是的,这就是我出错的地方。它通过消息无效双“5-1”等引发 NumberFormatException。如何根据表达式分隔数字部分?你能告诉我吗,不知道怎么做。即使我这样做了,我怎么知道哪个数字跟在哪个运算符后面? +,-,*/?
  • @ShahbazTalpur:请通过我发布的链接。这个很不错。查看接受的答案。
  • 在第一个链接中,在接受的答案中使用了ScriptEngineManager,这不适用于 Android。第二个链接很有趣,但我如何安装它?我将下载的 .jar 文件移动到 jre/lib/ext 文件夹,但输入 bsh.Intrepreter 给出无法解决错误。
猜你喜欢
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 2014-12-17
  • 1970-01-01
相关资源
最近更新 更多