我写了一个后期修复计算器:
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
答案 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);