计算器问题

时间:2016-11-07 14:45:13

标签: java android calculator

我正在做一个计算器应用程序而且我有一个问题。我无法区分负数和减法。我使用此代码将所有数字分开。

ArrayList<Double> doubles;
String[] strings1 = string.split("\\*");
for (String string2 : strings1) {
    String[] string3 = string2.split("÷");
    for (String string4 : string3) {
        String[] string5 = string4.split("\\+");
        for (String string6 : string5) {
            Log.e("Point_1", "String5 " + string5.toString());
            Log.e("Point_1", "String6 " + string6);
            String[] string7 = string6.split("\\-");
            for (String string8 : string7) {
                doubles.add(Double.parseDouble(string8));
            }
        }
    }
}

我得到的是[number1,number2,number3 ...](它们都是正面的)和其他ArrayList运算符,例如[+,-,+,*,- ...]。我需要的是先输入ArrayList(doubles)所有数字,但如果它们是,则将它们设为负数。让我给你举个例子。如果我们有一个像&#34; -3+6&#34;然后在双打中应该是数字:-3;6而在第二个ArrayList中只有&#34; +&#34;。如果我们有&#34; 6-3&#34;反之亦然。然后在双打中我们应该:6;3而在第二ArrayList只有&#34; -&#34;。 我怎么能这样做?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果string8是一个空字符串,您可能会认为它来自前导减号之前。用以下内容替换最里面的for循环:

                int index = 0;
                while (index < string7.length) {
                    String string8 = string7[index];
                    if (string8.isEmpty()) { // assume there was a leading minus here
                        // reverse sign of next double
                        index++;
                        doubles.add(-Double.parseDouble(string7[index]));
                    } else {
                        doubles.add(Double.parseDouble(string8));
                    }
                    index++;
                }

通过此更改,给定字符串-3+6,代码将[-3.0, 6.0]。使用6-3[6.0, 3.0](这是正确的,因为减号表示减法,而不是负数)。

这不会考虑多个主要的弊端,比如--3+6。如果你愿意,你所要做的就是连续检测多个空字符串,看看它们是偶数还是奇数。