【发布时间】:2016-06-07 17:05:25
【问题描述】:
该项目要求使用 Stack 来计算后缀表达式,特别是这个:
5.0 3.5 - 1.2 /
现在我的代码对于这个后缀表达式可以正常工作:
2 3 +
我错过了什么导致我出现以下错误?
线程“主”java.lang.NumberFormatException 中的异常:空 字符串
在 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842) 在 sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 在 java.lang.Double.parseDouble(Double.java:538) 在 java.lang.Double.(Double.java:608) 在 project.Calculator.processIn(Calculator.java:55) 在 project.Project_main.main(Project_main.java:25) Java 结果:1
package project;
import java.util.ArrayList;
import java.util.Stack;
public class Calculator {
Stack<Double> calcStack = new Stack<>();
ArrayList<String> operators = new ArrayList<>();
public Calculator() {
operators.add("+");
operators.add("-");
operators.add("/");
operators.add("*");
}
public double processIn(String expression){
String[] express = expression.split("");
String temp = "";
for(String j : express){
if(operators.contains(j)){
System.out.println("Operator Reached: " + j);
double operand2 = calcStack.pop();
double operand1 = calcStack.pop();
double tmp = 0.0;
if(j.compareTo("*") == 0){
tmp = operand1 * operand2;
System.out.println("Performing multiplication on " + operand1 + " and " + operand2);
calcStack.push(tmp);
}
else if(j.compareTo("/") == 0){
tmp = operand1 / operand2;
System.out.println("Performing division on " + operand1 + " and " + operand2);
calcStack.push(tmp);
}
else if(j.compareTo("-") == 0){
tmp = operand1 - operand2;
System.out.println("Performing subtraction on " + operand1 + " and " + operand2);
calcStack.push(tmp);
}
else if(j.compareTo("+") == 0){
tmp = operand1 + operand2;
System.out.println("Performing addition on " + operand1 + " and " + operand2);
calcStack.push(tmp);
}
System.out.println("Pushing result to stack: " + tmp);
}
else if(j.compareTo(" ") == 0){
double newOperand = new Double(temp);
temp = "";
System.out.println("Pushing to stack: " + newOperand);
calcStack.push(newOperand);
}
else{
temp = temp + j;
System.out.println("Current temp value: " + temp);
}
}
return calcStack.pop();
}
}
【问题讨论】:
-
你班上的第 55 行是什么?
-
double newOperand = new Double(temp);
-
当它碰到“”(空格)时会这样做