2 3+
我错过了什么,导致了下面的错误?
线程“main”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:538)位于Java.lang.Double.(Double.Java:608)位于
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();
}
}
我想这会解决你的问题。用“”(空格)而不是“”拆分
String[] express = expression.split(" ");
然后把你的另一个改变成咆哮
else {
double newOperand = new Double(j);
System.out.println("Pushing to stack: " + newOperand);
calcStack.push(newOperand);
}
如果大声喊话,则删除else
else if(j.compareTo(" ") == 0){
double newOperand = new Double(temp);
temp = "";
System.out.println("Pushing to stack: " + newOperand);
calcStack.push(newOperand);
}
else if(j.compareTo(" ") == 0){
try{
double newOperand = new Double(temp);
temp = "";
System.out.println("Pushing to stack: " + newOperand);
calcStack.push(newOperand);
}catch(NumberFormatException ex){
//skip
}
}
题3-3 后缀式计算 题目描述 输入一个后缀表达式,试计算该表达式的结果。 规定:后缀表达式的长度不超过一行(80个字符),以$作为输入结束,操作数、操作符之间用空格分隔,操作符只可能有+、-、*、/四种运算,操作数均为整数且运算过程不超出int型范围。例如:234 34 + 2 * $。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据在一行上输入不超过80个字符的合法的后缀表达式,数据之
我使用以下逻辑实现中缀到后缀的转换,以便稍后对其进行评估。 > 在中缀转换上循环,并在每次迭代中执行以下操作: 如果是空格,请忽略它 注意:当我遇到或时,我可以确定它是二进制还是一元操作符。如果它是二进制的,我将它添加到堆栈中作为'或,但是如果它是一进制的,我将它添加为'@'或'$'。 该算法运行良好,除非两个一元运算符相邻。 例如,变成了,这是错误的。 怎么了?这个问题的正确解决方案是什么,不会
问题内容: 我在计算本月下一个最后一天何时发送预定的通知时遇到问题。 这是我的代码: 这是导致问题的线,我相信: 如何使用日历正确设置下个月的通知的最后一天? 问题答案: 这将返回当前月份的实际最大值。例如,现在是leap年的2月,因此它返回29作为。
问题内容: 从下面或此处的程序中,为什么最后一次调用要打印该值7? 问题答案: 这将打印出“ 6”,因为它将i加1并返回值。5 + 1 = 6;这是前缀,在操作中使用该编号之前会添加该编号。 这将打印出“ 6”,因为它需要i,存储副本,加1并返回副本。因此,你获得了我当时的价值,但同时又增加了它。因此,你可以打印出旧值,但是它会增加。后缀增量的好处。 然后,当你打印出i时,它会显示i的实际值,因为
我做了一个小系统,它需要一个座位数来填满电影院一定数量的座位(没有排)。现在我做了一个填充座位并返回地图的方法,地图返回在什么位置有一定数量的座位是空闲的(例如3-2意味着从位置3开始有两个相邻的座位)。 这很有效,但如果我说最多有5个座位,而座位5是免费的,那么该方法不会将其返回到地图。 以下是使用的代码: 对象座椅 此方法创建一个LinkedList,并通过giveRandomAvailabi
这是一个理论上的问题: 我必须计算一个表达式,我已经从中缀转换到后缀。后缀保存在中,因为我希望避免使用。这样我就知道数字之间的除法在哪里,我可以按“正确”的顺序访问它。 它看起来是这样的: 现在我想用两个堆栈: null 如果我到达一个运算符,并且数量计数至少为2,我将执行该操作并将其推到目标堆栈上。到达原始堆栈的末尾(现在是空的),我会把所有的东西都传递给它,然后从头开始,直到只剩下结果。 我现