Java 为什么这段代码不允许我在完成计算器类后输入命令?
我正在尝试制作一个简单的基于文本的操作系统,我不明白为什么我的代码不允许我在计算器类完成后输入命令。它应该继续执行代码,直到我键入“off”,但事实并非如此。Eclipse说它正在运行,但我什么也做不了。有人能帮我吗 这是我的两门课:Java 为什么这段代码不允许我在完成计算器类后输入命令?,java,Java,我正在尝试制作一个简单的基于文本的操作系统,我不明白为什么我的代码不允许我在计算器类完成后输入命令。它应该继续执行代码,直到我键入“off”,但事实并非如此。Eclipse说它正在运行,但我什么也做不了。有人能帮我吗 这是我的两门课: public class Calculator extends Start{ public static void calStrt() { System.out.print("\nEnter operator you wish to use: ");
public class Calculator extends Start{
public static void calStrt() {
System.out.print("\nEnter operator you wish to use: ");
StringInput = scan.nextLine();
if (StringInput.equals("+")) {
add();
} else if (StringInput.equals("-")) {
sub();
} else if (StringInput.equals("*")) {
mul();
} else if (StringInput.equals("/")) {
div();
} else {
System.out.println("\nSyntax error: Operator not recognized");
System.out.println("Please try again");
calStrt();
}
}
public static void add() {
System.out.print("\nEnter first number: ");
intInput = scan.nextInt();
int intVar1 = intInput;
System.out.print("\nEnter second number: ");
intInput = scan.nextInt();
int intVar2 = intInput;
System.out.println("\nAnswer: " + (intVar1 + intVar2));
}
public static void sub() {
System.out.print("\nEnter first number: ");
intInput = scan.nextInt();
int intVar1 = intInput;
System.out.print("\nEnter second number: ");
intInput = scan.nextInt();
int intVar2 = intInput;
System.out.println("\nAnswer: " + (intVar1 - intVar2));
}
public static void mul() {
System.out.print("\nEnter first number: ");
intInput = scan.nextInt();
int intVar1 = intInput;
System.out.print("\nEnter second number: ");
intInput = scan.nextInt();
int intVar2 = intInput;
System.out.println("\nAnswer: " + (intVar1 * intVar2));
}
public static void div() {
System.out.print("\nEnter first number: ");
intInput = scan.nextInt();
int intVar1 = intInput;
System.out.print("\nEnter second number: ");
intInput = scan.nextInt();
int intVar2 = intInput;
System.out.println("\nAnswer: " + (intVar1 / intVar2));
}
}
import java.util.Scanner;
class Start {
static Scanner scan = new Scanner(System.in);
static String StringInput;
static int intInput;
public static void main(String[] args) {
System.out.println("\nWelcome to RobOS");
passLoop: while (true) {
System.out.print("\nPlease enter password: ");
StringInput = scan.nextLine();
if (StringInput.equals("banana")) {
System.out.print("Logging in, please wait");
System.out.print(".");
System.out.print(".");
System.out.println(".");
System.out.println("\nWelcome User");
outerLoop: while (true) {
System.out.println("\nType \"help\" to see a list of programs");
StringInput = scan.nextLine();
innerLoop: while (true) {
if (StringInput.equalsIgnoreCase("cal")) {
Calculator.calStrt();
continue outerLoop;
} else if (StringInput.equalsIgnoreCase("guess")) {
GuessGame.guess();
continue outerLoop;
} else if (StringInput.equalsIgnoreCase("help")) {
System.out.println("\n\"cal\" uses the calculator");
System.out.println("\"guess\" plays guessing game");
System.out.println("\"help\" shows list of programs");
System.out.println("\"off\" turns RobOS off");
continue outerLoop;
} else if (StringInput.equalsIgnoreCase("off")){
break passLoop;
}
}
}
} else {
System.out.println("\nWrong password. Please try again");
continue passLoop;
}
}
}
}
您的代码正在进入一个无限循环。当您调用
StringInput=scan.nextLine()
时,它第一次工作正常。我输入了cal
,可以运行计算器一次。问题是第二次调用scan.nextLine()
时,它会自动返回一个空字符串“”,作为StringInput
的值。while(true)
中的一组if/else
语句无法处理此问题,因此它只能永远循环
更深层次的理由是调用
scan.nextInt()
来读取数字,但问题是当您为计算器操作读取第二个数字时,系统中仍有一个“\n”。因此,当您循环并再次调用scan.nextLine()
时,它不会提示您输入任何内容,因为它只会读取仍位于系统中的“\n”,然后将您送入无限循环。您的代码正在进入无限循环。当您调用StringInput=scan.nextLine()
时,它第一次工作正常。我输入了cal
,可以运行计算器一次。问题是第二次调用scan.nextLine()
时,它会自动返回一个空字符串“”,作为StringInput
的值。while(true)
中的一组if/else
语句无法处理此问题,因此它只能永远循环
更深层次的理由是调用scan.nextInt()
来读取数字,但问题是当您为计算器操作读取第二个数字时,系统中仍有一个“\n”。因此,当您循环并再次调用scan.nextLine()
时,它不会提示您输入任何内容,因为它只会在系统中读取“\n”,然后将您送入无限循环。scan.nextLine()
:Integer.parseInt(scan.nextLine())代码>
希望这行得通布伦特·纳什是正确的。要修复此错误,请尝试使用而不是scan.nextLine()
:Integer.parseInt(scan.nextLine())代码>
希望这能起作用您确定要在输入错误时从calStrt
内调用calStrt
?似乎是递归的一个坏点。如果有人发出错误的命令,那么内部循环的意义是什么?它将导致无限循环?您确定要从calStrt
内部对错误输入调用calStrt
?似乎是递归的一个坏点。如果有人发出错误的命令,内部循环的意义是什么?它将导致无限循环?当您在System.in
上完成一个特定的操作,并且您想清除它以便为下一个操作刷新时,您可以这样做:System.in.skip(Long.MAX\u值)
放弃系统的其余部分。在
中,或者您可以尝试在add()
末尾插入另一个对scan.nextLine()的调用。虽然不理想,但它确实有效。标准输入有很多这样令人讨厌的边缘情况。感谢您的快速和有用的响应!当您在System.in
上完成了一个特定的操作,并且希望将其清除以供下次操作使用时,您可以这样做:System.in.skip(Long.MAX_值)
放弃系统的其余部分。在
中,或者您可以尝试在add()
末尾插入另一个对scan.nextLine()的调用。虽然不理想,但它确实有效。标准输入有很多这样令人讨厌的边缘情况。感谢您的快速和有用的响应!