Калькулятор строк в Android

#android #string

#Android #строка

Вопрос:

Я пытаюсь создать строковый калькулятор в 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) == "(")
  

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

Комментарии:

1. проверьте мой ответ

Ответ №1:

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

Пример:

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

Ответ №2:

У вас есть 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) == "(") {
  

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

Ответ №3:

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

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

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