2016-11-07 2 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

Помимо этого: в вашем операторе журнала вместо '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. Если бы вы захотели, все, что вам нужно было сделать, это обнаружить несколько пустых строк в строке и посмотреть, было ли четное или нечетное число из них.