程序在“线程”中获取错误异常;“主要”;java.lang.NumberFormatException:迭代数学表达式时
当我尝试使用该函数来迭代用户输入表达式时,我得到了程序在“线程”中获取错误异常;“主要”;java.lang.NumberFormatException:迭代数学表达式时,java,stack,Java,Stack,当我尝试使用该函数来迭代用户输入表达式时,我得到了java.lang.NumberFormatException,我尝试了很多时间来修复循环,但我仍然无法理解出错时它在哪里做的。IDE建议它在parstIntwhile循环中出错 代码如下: import java.util.Scanner; import java.util.Stack; static Stack<Integer> stackForOperand = new Stack<Integer>(); stat
java.lang.NumberFormatException
,我尝试了很多时间来修复循环,但我仍然无法理解出错时它在哪里做的。IDE建议它在parstInt
while循环中出错
代码如下:
import java.util.Scanner;
import java.util.Stack;
static Stack<Integer> stackForOperand = new Stack<Integer>();
static Stack<Character> stackForOperator = new Stack<Character>();
public static int processOneOperator(char stackForOperator, int num1, int num2) {
int result = 0;
switch (stackForOperator) {
case '+':
result = num1 + num2;
case '-':
result = num1 - num2;
case '*':
result = num1 * num2;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
throw new UnsupportedOperationException("divide by zero error");
}
}
return result;
}
public static boolean num_order(char first, char second) {
if (first == '(' || second == ')') {
return false;
} else if ((first == '*' || first == '/') && (second == '+' || second == '-')) {
return false;
} else {
return true;
}
}
public static int calculation_loop(String expression) {
for (int i = 0; i < expression.length(); i++) {
if (expression.charAt(i) >= '0' && expression.charAt(i) <= '9') {
String more_num = "";
while (i < expression.length() && expression.charAt(i) >= '0' && expression.charAt(i) <= '9') {
more_num += expression.charAt(i++);
int more_num2 = Integer.parseInt(more_num);
stackForOperand.push(more_num2);
i--;
}
} else if (expression.charAt(i) == '(') {
stackForOperator.push(expression.charAt(i));
} else if (expression.charAt(i) == ')') {
while (stackForOperator.peek() != '(') {
stackForOperand.push(
processOneOperator(stackForOperator.pop(), stackForOperand.pop(), stackForOperand.pop()));
stackForOperator.pop();
}
} else if (expression.charAt(i) == '+' || expression.charAt(i) == '-' || expression.charAt(i) == '*'
|| expression.charAt(i) == '/') {
while (!stackForOperator.empty() && num_order(expression.charAt(i), stackForOperator.peek())) {
stackForOperand.push(
processOneOperator(stackForOperator.pop(), stackForOperand.pop(), stackForOperand.pop()));
stackForOperator.push(expression.charAt(i));
}
}
}
while (!stackForOperator.empty()) {
stackForOperand
.push(processOneOperator(stackForOperator.pop(), stackForOperand.pop(), stackForOperand.pop()));
}
return stackForOperand.pop();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("/");
String input = scanner.nextLine();
input = input.replaceAll("\\s+", "");
System.out.println(input);
Integer output = calculation_loop(input);
System.out.println(output);
}
import java.util.Scanner;
导入java.util.Stack;
静态堆栈StackForOperator=新堆栈();
静态堆栈stackForOperator=新堆栈();
公共静态int processOneOperator(char stackForOperator、int num1、int num2){
int结果=0;
开关(stackForOperator){
格“+”:
结果=num1+num2;
案例'-':
结果=num1-num2;
案例“*”:
结果=num1*num2;
案例“/”:
如果(num2!=0){
结果=num1/num2;
}否则{
抛出新的UnsupportedOperationException(“除以零错误”);
}
}
返回结果;
}
公共静态布尔num_顺序(字符第一,字符第二){
如果(第一个=='('| |第二个==')'){
返回false;
}else如果((第一个=='*'| |第一个=='/')和&(第二个=='+'| |第二个=='-')){
返回false;
}否则{
返回true;
}
}
公共静态整数计算循环(字符串表达式){
for(int i=0;i 如果(expression.charAt(i)>='0'&&expression.charAt(i)='0'&&expression.charAt(i)查看这段代码:
公共静态整数计算\u循环(字符串表达式){
for(int i=0;i if(expression.charAt(i)>='0'和&expression.charAt(i)='0'和&expression.charAt(i)='0'和&expression.charAt(i)='0'和&expression.charAt(i)='0'和&expression.charAt(i)您需要包括完整的错误消息和堆栈跟踪,以及您为程序提供的输入。我建议阅读。请解释您希望他的程序做什么。请参阅和