Выражение исправления Java Post

Я написал постфиксный калькулятор:

import java.util.Scanner;

public class req1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Double result = 0D;
        String  input  ="";
        int count =1;

        while (count ==1) {
            Scanner scan = new Scanner(System.in);
            System.out.print("Welcome to your Postfix Calculator\n====================\n");
            System.out.println("Enter your postfix expression, OR to exit type stop:");
            input = scan.nextLine();


            if (input.toLowerCase().equals("stop"))
            {
                System.out.println("Received stop command...");
                System.exit(0);
            }//end of if statement

            else{
                try
                {
                    String[] inputArray = input.split(" ");
                    if (inputArray.length == 3)
                    {

                        Double number1 = Double.parseDouble(inputArray[0]);
                        Double number2 = Double.parseDouble(inputArray[1]);
                        String operator = inputArray[2];


                        switch (operator)
                        {
                            case "+":
                                result = number1 + number2;
                                break;
                            case "-":
                                result = number1 - number2;
                                break;
                            case "/":
                                result = number1 / number2;
                                break;
                            case "*":
                                result = number1 * number2;
                                break;
                            default:
                                System.out.println("Received unsupported operator: " + operator);
                                break;
                        }//end of switch

                    }else{
                        System.out.println("invalid expression");
                    }}
                catch (NumberFormatException e)
                {
                    System.err.println("Error:\n" + e.getMessage());
                }
            }
            System.out.println("Result: " + result);
        }
    }
}

Я не говорю, что этот код не работает, потому что он работает, но он работает только в том случае, если пользователь вводит постфиксное выражение как:

7 8 +

если пользователь вводит так:

7 + 8 

калькулятор не выдает ошибку (Invalid expression), я не знаю, где она, я ошибаюсь или я что-то упускаю в своем коде. Кроме того, когда появляется результат, он дает только ответ, который мне нужен, чтобы заставить его работать, чтобы он выдавал выражение, а затем ответ

e.g.

7 8 +
или
7 + 8
ваш результат: 7 + 8 = 15


person computing    schedule 05.11.2015    source источник


Ответы (3)


Вы сохранили заказ как номер1, номер2 и оператор. Таким образом, в качестве оператора используются любые третьи значения массива.

Double number1 = Double.parseDouble(inputArray[0]);
          Double number2 = Double.parseDouble(inputArray[1]);
          String operator = inputArray[2];

Если вам нужен правильный порядок 7 + 8, вам нужно сохранить значение oprator как inputArray[1] следующим образом:

Double number1 = Double.parseDouble(inputArray[0]);
          String operator = inputArray[1];
          Double number2 = Double.parseDouble(inputArray[2]);

Тогда 7+8 будет работать корректно.

person Sudha    schedule 05.11.2015
comment
Спасибо за вашу помощь, но мне нужно, чтобы она работала, чтобы, когда пользователь вводит 7 + 8, он выдавал ошибку, говорящую о недопустимом выражении, а затем снова предлагал ввести это выражение. - person computing; 05.11.2015

Для этого вам нужно добавить оператор continue в блок else следующим образом:

}else{
            System.out.println("invalid expression");
            continue;
        }}
person Sudha    schedule 05.11.2015

В вашем калькуляторе вы получаете вывод Invalid expression, когда имеется более 3 элементов выражения, поэтому при вводе, например: 4 5 6 +. Между тем, вход 1 + 3 вызывает NumberFormatException, и в этом случае блок try{}catch{} делает то, что вы закодировали, поэтому он печатает только сообщение об ошибке.

Если вы хотите, чтобы ввод типа 3 + 5 давал Invalid expression, добавьте его к try{}catch{}, например:

catch (NumberFormatException e)
{
    System.err.println("Error:\n" + e.getMessage());
    System.out.println("invalid expression");
}

Если вам нужен вывод в форме your result is: 7 + 8 = 15, вы можете, например, сначала добавить объявление обоих объектов Double в начале метода main:

public static void main(String[] args) {
    Double number1 = 0.0;
    Double number2 = 0.0;

поэтому он будет доступен во всем методе, а затем измените строку вывода на:

System.out.println("Your result is" + number1 +" + "+ number2 + " = " + result);
person m.cekiera    schedule 05.11.2015
comment
Спасибо за вашу помощь, но я попробовал недопустимое выражение в коде, но оно все равно не работает. Если пользователь вводит 7 + 8, он говорит, что ввод ошибки + строка неверна, но мне нужно, чтобы он сказал недопустимое выражение - person computing; 05.11.2015
comment
@вычисление строки System.err.println("Error:\n" + e.getMessage()); дает вам вывод: Error: For input string: "+". Если он вам не нужен, удалите его, замените на System.out.println("invalid expression"); - person m.cekiera; 05.11.2015
comment
Кроме того, добавьте строку continue; после System.out.println("invalid expression"); в блок try{}catch, тогда она не будет печатать строку результата после исключения. - person m.cekiera; 05.11.2015