2016-11-07 26 views
0

私は電卓のアプリをやっていると私は1つの問題があります。私は負の数と減算を区別できません。このコードを使用して、すべての数値を区切ります。私は何を得る電卓の問題

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で、第2のArrayListは "+"のみである必要があります。そして、もし我々が "6-3"を持っていれば、ダブルで我々は:6;3を持っていて、第二のArrayListには "-"しかないはずです。 どうすればいいですか?

ありがとうございます。

+1

シャントヤードアルゴリズムを調べます。オペレーターを取り外さないでください。 –

+0

私はPOJOを作って、演算子と値を私的に格納することができます。 –

+0

とは別に、 'string5.toString()'ではなくlog文で、 'Arrays.toString(string5)'が必要です。 –

答えて

1

string8が空の文字列の場合、先頭のマイナスの前にあると仮定できます。コードは[-3.0, 6.0]を与える文字列-3+6与えられ、この変更により

   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++; 
       } 

:とループのためのあなたの最も内側を交換してください。 6-3では、[6.0, 3.0](マイナスは減算を表し、負数ではないため正解です)。

これは、例えば、--3+6など、複数の主要なマイナス要因を考慮していません。必要ならば、空の文字列を複数連続して検出し、偶数か奇数かを確認するだけです。