我的代码似乎陷入了无限循环,我对此感到困惑。我介绍了一些代码,直到我触发了错误消息:
import java.util.Scanner;
public class Average
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int count = 0;
double sum = 0;
System.out.print("Enter a value: ");
boolean notDone = true;
while (notDone)//go into loop automatically
{
if(!in.hasNextDouble()){
if(count==0){//this part generates bugs
System.out.print("Error: No input");
}else{
notDone = false;
}
}else{
sum+= in.nextDouble();
count++;
System.out.print("Enter a value, Q to quit: ");
}
}
double average = sum / count;
System.out.printf("Average: %.2f\n", average);
return;
}
}
正如评论中所指出的,罪魁祸首是这些界限:
if(count==0){ //this part generates bugs
System.out.print("Error: No input");
}
这个if情况的目的是让用户留在循环中并被提醒需要有效输入,直到它收到有效输入,但它不像没有办法爆发循环,因为用户可以在程序收到有效输入(至少一个double值,后跟非double值)的条件下中断循环。
干杯。
答案 0 :(得分:2)
您的代码进入无限循环,因为如果未检测到double
,条件不会取得任何进展。发生这种情况时,您会打印一条消息,但不会从扫描仪中删除垃圾输入。
将in.nextLine()
添加到条件将解决此问题:
if(!in.hasNextDouble()){
if (!in.hasNextLine()) {
// The input is closed - exit the program.
System.out.print("Input is closed. Exiting.");
return;
}
in.nextLine();
... // The rest of your code
} ...