2016-10-24 2 views
0

Я пытаюсь создать строковый калькулятор в Android, вот моя функция;String Calculator в Android

public void hesapla(View view) { 

    islemString = Islem.getText().toString(); 

    List<String> operatorList = new ArrayList<String>(); 
    List<String> operandList = new ArrayList<String>(); 
    StringTokenizer st = new StringTokenizer(islemString, "+-*/()", true); 

    while (st.hasMoreTokens()) { 
     String token = st.nextToken(); 

     if ("+-/*()".contains(token)) { 
      operatorList.add(token); 
     } else { 
      operandList.add(token); 
     } 
    } 
    for(int i=0; i>=20; i++) { 
     if (operatorList.get(i) == "(") { 
      int a=0; 
      while(operatorList.get(a) == ")"){ 

       if(operatorList.get(a+1) == "+"){ 
        sonucDouble = Double.parseDouble(String.valueOf(operandList.get(i))) + Double.parseDouble(String.valueOf(operandList.get(i+1))); 
       } 

       if(operatorList.get(a+1) == "-"){ 
        sonucDouble = Double.parseDouble(String.valueOf(operandList.get(i))) - Double.parseDouble(String.valueOf(operandList.get(i+1))); 
       } 

       if(operatorList.get(a+1) == "*"){ 
        sonucDouble = Double.parseDouble(String.valueOf(operandList.get(i))) * Double.parseDouble(String.valueOf(operandList.get(i+1))); 
       } 

       if(operatorList.get(a+1) == "/"){ 
        sonucDouble = Double.parseDouble(String.valueOf(operandList.get(i)))/Double.parseDouble(String.valueOf(operandList.get(i+1))); 
       } 
       a++; 
      } 
     } 
    } 

При нажатии кнопки «Вычислить», я получаю операнд «Список» и «Оператор», чтобы перечислить каждый из них. Но я не могу читать снова.

if (operatorList.get(i) == "(") 

Я пытаюсь это сделать, но где моя ошибка? Как я могу? Спасибо.

+0

проверить мой ответ – Sodiq

ответ

4

В Java/Android сравнении объектов следует использовать equals() вместо == (как лучшая практики, чтобы избежать NullPointerException, использовать константы при сравнении первых String).

Пример:

if ("(".equals(operatorList.get(i))) 
1

Вы for цикл, который никогда не будет выполнять

for(int i=0; i>=20; i++) { 
    if (operatorList.get(i) == "(") { 

Вы начинаете с i=0 и условия для зацикливания i>=20, которая не является правдой. Попробуйте

for(int i=0; i<=20; i++) { 
    if (operatorList.get(i) == "(") { 

, а затем увидеть, если ваш код движется вперед

+0

Да ладно, ты так прав! Где мой рассудок! –

+1

@CanUzun, так почему вы приняли другой ответ? – ilmash

0

Я думаю, что вам нужно изменяет код при сравнении строки,

if (operatorList.get(i).equals("("))) 

И изменения также для других

+0

@CanUzun не могли бы вы принять этот ответ? – Sodiq