2016-11-07 149 views
0

我正在做一个计算器应用程序,我有一个问题。我无法区分负数和减法。我使用此代码来设置所有数字。计算器问题

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)所有数字加起来,但如果它们是负数。让我举一个例子。如果我们有像“-3+6”这样的字符串,那么在双打应该是数字:-3;6和第二个ArrayList只有“+”。反之亦然,如果我们有“6-3”那么双打我们应该有:6;3和第二ArrayList只有“-”。 我该怎么做?

谢谢。

+1

查看分流码算法。不要删除您的操作员。 –

+0

我会做一个POJO,允许我私人存储一个操作符和一个值 –

+0

Aside:在你的日志语句中,而不是'string5.toString()'你想'Arrays.toString(string5)'。 –

回答

1

如果string8是一个空字符串,则可以假定它来自前导减号之前。更换你的内心与循环:

   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。如果你愿意,你所要做的就是检测连续的多个空串,看看是否有偶数或奇数。