Создание калькулятора на одну строку - PullRequest
0 голосов
/ 13 февраля 2020

сейчас я делаю однострочный калькулятор, изучаю регулярные выражения и у меня есть несколько вопросов.

С 2 числами вроде: 2 + 2, результат будет 4, но если я попытаюсь ввести 3 числа: 2 + 2 + 2, на выходе будет 4, игнорируя третье число, но я собираюсь, хотя operands.length.

другое, если я попытаюсь поставить первое число как отрицательное, как : - 2 + 2, это даст мне ошибку: Исключение в потоке "main" java .lang.NumberFormatException: Для входной строки: "".

String [] operator = input.split (" \ s * - \ W + \ s * "); на самом деле не работает, но почему?

   Scanner scanner = new Scanner(System.in);

        while (true) {
            String input = scanner.nextLine();

            boolean ifExit = false;
            boolean ifHelp = false;
            boolean ifEmpty = false;
            boolean ifOneNumber = false;

            String[] operators = input.split("\\s*\\w+\\s*");
            String[] operands = input.split("\\s*[+-]+\\s*");

            int result = 0;

            if (operands[0].matches("/exit")) {
                ifExit = true;
                System.out.println("Bye!");
                break;
            } else if (operands[0].matches("/help")) {
                ifHelp = true;
                System.out.println("The program calculates the sum of numbers");
            } else if (operands[0].matches("")) {
                ifEmpty = true;
            } else if (operands[0].matches("[0-9]+") && operands.length == 1) {
                ifOneNumber = true;
                result += Integer.parseInt(operands[0]);
                System.out.println(result);
            }

            for (int i = 1; i < operands.length; i++) {
                result = Integer.parseInt(operands[0]);

                if (operators[i].matches("[+]")) {
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result += Integer.parseInt(operands[i]);
                } else if (operators[i].matches("[-]")){
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result -= Integer.parseInt(operands[i]);
                } else if (operators[i].matches("[+]{2,1000}")) {
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result += Integer.parseInt(operands[i]);
                } else if (operators[i].matches("[-]{2}")) {
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result += Integer.parseInt(operands[i]);
                } else if (operators[i].matches("[-]{3}")) {
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result -= Integer.parseInt(operands[i]);
                }
            }
            if (ifExit == true) {
                break;
            } else if (ifExit == false && ifHelp == false && ifEmpty == false && ifOneNumber == false) {
                System.out.println(result);
            }
        }

    }

    public static void allBooleansAreFalse(boolean ifHelp, boolean ifEmpty, boolean ifOneNumber) {
        ifHelp = false;
        ifEmpty = false;
        ifOneNumber = false;
    }

1 Ответ

0 голосов
/ 13 февраля 2020

Я исправил первую проблему, добавив этот код непосредственно перед для l oop:

else if (operands[0].matches("[0-9]")) {
                result = Integer.parseInt(operands[0]);
            }

и удалив этот код внутри для l oop:

result = Integer.parseInt(operands[0]);

теперь мне нужно исправить проблему с отрицательными числами, где, если первое число отрицательное: -2 + 2, это дает мне ошибку, кто-нибудь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...