gpt4 book ai didi

java - 如何通过 while 循环一次处理输入一个数字

转载 作者:行者123 更新时间:2023-12-01 17:36:07 25 4
gpt4 key购买 nike

我的主要方法要求用户输入一个表达式,一个类似于“5 4 +”或“6 4 + 8/”的输入,其中操作数和运算符以空格分隔。我有一个方法可以处理这个输入并给出它等于的答案。它循环遍历通过 while 循环输入的所有数字,该循环在 scnr.hasNext() == true 或 errorMessage 不为 null 时结束。目前,scnr.hasNext() 比预期更早变为 false,导致循环仅读取第一个数字,然后结束。它变得错误,因为我尝试将 scnr.nextInt() 存储到变量中。我需要它只取第一个数字,保留其余数字,我认为这将使 scnr.hasNext() 保持 true。这是我的整个方法

public static Number evaluateExpression(String expr) {
int var = 0;
String input = "";

String tooFewOperands = "Too few operands";
String unKnownOperator = "Unknown operator:";
String tooManyOperands = "Too many operands.";

Stack<Integer> stack = new Stack<>();
String errMsg = null;

Scanner scnr = new Scanner(expr);

while (scnr.hasNext() && errMsg == null) {
if (scnr.hasNextInt()) {
var = scnr.nextInt(); //Problematic line
System.out.println("Operand read: " + var);
stack.push(var);
} else {
input = scnr.next();
if (checkValidOperator(input) == input.toCharArray()[0]) {
System.out.println("Operator read: " + input);
// stack.push(var);
if (stack.size() >= 2) {
execute(stack, input.toCharArray()[0]);
} else {
errMsg = tooFewOperands;
}
} else {
errMsg = unKnownOperator + " " + input + " ";
}
}
System.out.println("------ Stack state -----");
System.out.println(stack.toString());
System.out.println(scnr.hasNext());
}
if (errMsg != null) {
System.out.println("Failed evaluation of |" + expr + "|\n" + errMsg);
return null;
}
if (stack.size() > 1) {
System.out.println("Failed evaluation of |" + expr + "|\n" + tooManyOperands + stack.toString());
return null;
} else {
return stack.peek();
}
}

请注意,Scanner scnr 是用 String expr 初始化的,我认为我的老师暗示过,允许我从 scnr 读取各个 token 。她说“使用 expr 作为其构造函数的参数来初始化扫描器,这将允许您从表达式中读取标记。”我从未使用 System.in 以外的东西初始化过扫描仪。她还指定,要使用此方法,我应该“编写一个循环,只要扫描仪有输入(hasNext)并且错误消息为空,该循环就会运行”。这就是 while 条件必须是的。

最佳答案

一般来说,当您为字符串类型和数字类型创建 Scanner 对象时,就会发生这种情况(或者至少发生在我身上)。

我所做的是使用 var = Integer.parseInt(scnr.nextLine());相反。

希望对你有帮助。

关于java - 如何通过 while 循环一次处理输入一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61036685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com