我正在尝试获取用户输入,当我为第一次尝试设置一个值时,它会再次给我一个问题“输入表达式(%要中断):”虽然如果第一次尝试是空白的,它将给出正确的错误消息“表达式不能为空”。
所以我需要的是如何让第一次尝试工作。
感谢已经解决了!!我真的很欣赏它!
package PrefixCalc;
import java.util.Scanner;
public class PrefixCalc {
public static void main(String[] args) {
Expressions calc;
Scanner console = new Scanner(System.in);
System.out.print("Enter the Expression(% to break): ");
String line = console.nextLine();
while (line.isEmpty()) {
System.out.println("Expression cannot be empty!");
System.out.print("Enter the Expression(% to break): ");
line = console.nextLine();
}
while (!line.isEmpty()) {
if (line.equals("%")) {
break;
} else {
if (args.length > 0) {
System.out.println("Processing string " + args[0]);
calc = new Expressions(new Scanner(args[0]));
} else {
System.out.print("Enter the Expression(% to break): ");
calc = new Expressions(new Scanner(console.nextLine())); //System.in
}
System.out.println("\nInput as prefix expression:");
calc.showPreFix();
System.out.println("Result: " + calc.evaluate());
System.out.println("infix expression:");
calc.showInFix();
System.out.println("...................................................");
}
}
}
}
答案 0 :(得分:1)
在你的while循环中,你没有使用你在if语句中从控制台收到的输入,你正在使用args
,即main方法的输入,这不是用户在输入后输入的值提示"Enter the Expression(% to break): "
。
问题就在这里:
if (args.length > 0) { <--- args instead of line
System.out.println("Processing string " + args[0]);
calc = new Expressions(new Scanner(args[0]));
} else {
System.out.print("Enter the Expression(% to break): ");
calc = new Expressions(new Scanner(console.nextLine())); //System.in
}
args.length
是0
因为,大概是你没有用任何命令运行此方法。由于args
为空,因此您将进入else语句并再次打印出"Enter the Expression(% to break): "
提示。
只需使用line
中的if-statment
变量,它就可以正常使用。像这样:
if (line.length > 0) {
System.out.println("Processing string " + args[0]);
calc = new Expressions(new Scanner(args[0]));
} else {
System.out.print("Enter the Expression(% to break): ");
calc = new Expressions(new Scanner(console.nextLine())); //System.in
}
此外,您应该将line
重新分配给第二个提示后的新值。你需要用它做一些事情以避免无限循环。请参阅@Kevin Bowersox的答案,找到解决该问题的优雅方案。
答案 1 :(得分:1)
代码正在创建一个无限循环。 while loop
执行时line
执行,String line
不为空,但永远不会为空,因为永远不会修改line
。在某些时候,需要为%
分配用户输入的值,以便在输入line
时它可以适当地中断。另外我不确定为什么代码使用传递给main方法的参数,而应该使用 //if line contains anything other than `%` it causes an infinite loop
while (!line.isEmpty()) {
if (line.equals("%")) {
break;
} else {
if (args.length > 0) {
System.out.println("Processing string " + args[0]);
calc = new Expressions(new Scanner(args[0]));
} else {
System.out.print("Enter the Expression(% to break): ");
calc = new Expressions(new Scanner(console.nextLine())); //System.in
}
System.out.println("\nInput as prefix expression:");
calc.showPreFix();
System.out.println("Result: " + calc.evaluate());
System.out.println("infix expression:");
calc.showInFix();
System.out.println("...................................................");
}
}
。
while (!line.isEmpty()) {
if (line.equals("%")) {
break;
}
calc = new Expressions(new Scanner(line));
System.out.println("\nInput as prefix expression:");
calc.showPreFix();
System.out.println("Result: " + calc.evaluate());
System.out.println("infix expression:");
calc.showInFix();
System.out.println("...................................................");
System.out.print("Enter the Expression(% to break): ");
line = console.nextLine();
}
<强> FIX 强>
{{1}}