Java калькулятор строк, первое число отрицательное - PullRequest
0 голосов
/ 14 февраля 2020

Итак, у меня есть этот код, который я взял из другого вопроса и на который он никогда не отвечал. Как мне изменить код, если String a = "-5 + 20-15 + 8" с первым отрицательным числом, прямо сейчас выдает ошибку.

 String a = "5+20-15+8";
    System.out.println(a);
    String operators[]=a.split("[0-9]+");
    String operands[]=a.split("[+-]");
    int agregate = Integer.parseInt(operands[0]);
    for(int i=1;i<operands.length;i++){
        if(operators[i].equals("+"))
            agregate += Integer.parseInt(operands[i]);
        else 
            agregate -= Integer.parseInt(operands[i]);
    }
    System.out.println(agregate);

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Один быстрый способ исправить это - убедиться, что вы не разбили первый - при разбиении строки на операнды.

String operands[]=a.split("(?<=\\d)[+-]");

Это регулярное выражение утверждает, что + или - должен сопровождаться ди git.

Таким образом, первый операнд будет -5, который затем будет правильно проанализирован как Integer.parseInt.

Если вы нужно только обрабатывать сложение и вычитание, вот еще один способ думать о проблеме: нет операторов, только операнды. В -5+20-15+8 есть только операнды -5, +20, -15, +8, и вам просто нужно сложить их все. Мы можем разбить строку на операнды на границе di git - [+-]:

String[] operands = a.split("(?<=\\d)(?=[+-])");

и затем просто сложить их все:

int result = 0;
for (int i = 0 ; i < operands.length ; i++) {
    result += Integer.parseInt(operands[i]);
}
// or:
// int result = Arrays.stream(operands).mapToInt(Integer::parseInt).sum();
System.out.println(result);
0 голосов
/ 14 февраля 2020

Проблема в том, что - и + используются в качестве разделителей, поэтому первые - в -5 будут интерпретироваться как таковые неправильно. Быстрое решение состоит в том, чтобы ожидать, что эти два оператора должны иметь пробелы вокруг себя, таким образом, они дифференцируют себя от случая, когда они представляют знак.

public class Main {
     public static void main(String []args){
         String a = "-5 + 20 - 15 + 8";
            System.out.println(a);
            String operators[]=a.split("[0-9]+");
            String operands[]=a.split(" [+-] ");
            int agregate = Integer.parseInt(operands[0]);
            for(int i=1;i<operands.length;i++){
                if(operators[i].equals(" + "))
                    agregate += Integer.parseInt(operands[i]);
                else 
                    agregate -= Integer.parseInt(operands[i]);
            }
            System.out.println(agregate);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...