2016-11-07 204 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。如果你願意,你所要做的就是檢測連續的多個空串,看看是否有偶數或奇數。