0

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

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),我不知道我哪里出错了,或者我的代码中是否遗漏了一些东西。此外,当结果出现时,它只会给出我需要让它工作的答案,以便它给出表达式,然后给出答案

例如

7 8 +

7 + 8
你的结果是:7 + 8 = 15

4

3 回答 3

0

在您的计算器中Invalid expression,当表达式元素超过 3 个时,您会得到输出,因此输入如下:4 5 6 +。同时,输入1 + 3couse NumberFormatException,在这种情况下,try{}catch{}块执行您编码的操作,因此它只打印错误消息。

如果您希望输入喜欢3 + 5give 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);
于 2015-11-05T19:58:51.703 回答
0

为此,您必须像这样在 else 块中添加 continue 语句,

}else{
            System.out.println("invalid expression");
            continue;
        }}
于 2015-11-05T19:51:09.957 回答
0

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

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

如果您想要正确的顺序 7 + 8,那么您需要像这样将运算符值存储为 inputArray[1],

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

然后 7 + 8 将正常工作。

于 2015-11-05T19:44:20.907 回答