Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
程序在“线程”中获取错误异常;“主要”;java.lang.NumberFormatException:迭代数学表达式时_Java_Stack - Fatal编程技术网

程序在“线程”中获取错误异常;“主要”;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;iif(expression.charAt(i)>='0'和&expression.charAt(i)='0'和&expression.charAt(i)='0'和&expression.charAt(i)='0'和&expression.charAt(i)='0'和&expression.charAt(i)您需要包括完整的错误消息和堆栈跟踪,以及您为程序提供的输入。我建议阅读。请解释您希望他的程序做什么。请参阅和