Java Post Fix Expression

时间:2015-11-05 19:36:19

标签: java arrays java.util.scanner postfix-operator

我写了一个后期修复计算器:

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

3 个答案:

答案 0 :(得分:0)

您已将订单存储为number1,number2和operator。所以它将数组的第三个值作为运算符。

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将正常工作。

答案 1 :(得分:0)

为此,您必须在else块中添加continue语句,如下所示

}else{
            System.out.println("invalid expression");
            continue;
        }}

答案 2 :(得分:0)

在计算器中,当表达式超过3个元素时,您会得到Invalid expression输出,因此输入如: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);