无法完成扫描仪的输入
Unable to complete Input for Scanner
我正在开发一个平均成绩的程序。出于某种原因,我的扫描仪或控制台不允许我输入第三个问题的答案,我不确定为什么。
很多代码都被注释掉了,因为现在不需要了。
编辑:我不确定如何在此处对代码行编号,但我认为第 23-28 行是问题所在
import java.text.DecimalFormat;
import java.util.Scanner;
public class GradeData {
public static void main(String[] args) {
int count = 0;
double grade = 0;
//decided to use double for grade in case user's want to be specific with
//decimal points.
String user;
boolean enter;
String name;
String enterAgain;
Scanner userInput = new Scanner(System.in);
System.out.println("Please enter your name: ");
name = userInput.nextLine();
System.out.println("Please enter a grade: ");
grade = userInput.nextDouble();
//System.out.println(user); //May not need this line
System.out.println("Would you like to continue entering grades? (y/n)");
enterAgain = userInput.nextLine();
if (enterAgain.equalsIgnoreCase("y"))
/*|| enterAgain.equalsIgnoreCase("Yes"))*/ {
System.out.println("Please enter another grade: "); }
/* if (user.getScore() > highScore) {
highScore = user.getScore();
}
System.out.println("High Score: "
+ DecimalFormat.format(grade));
user.setScore(0);
}*/
else {
enter = false;
userInput.close();
}
}
}
查看@Fast Snail 评论的 link (Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods) - 它解释了您的问题。要解决这个问题,如post所示,在userInput.nextDouble()
之后添加一个userInput.nextLine()
。这是完成的代码(我删除了一些不相关的注释和变量):
import java.util.Scanner;
public class GradeData{
public static void main(String[] args){
double grade = 0;
String name;
String enterAgain;
boolean enter = true; //to use in while loop
Scanner userInput = new Scanner(System.in);
System.out.println("Please enter your name: ");
name = userInput.nextLine();
System.out.println("Please enter a grade: ");
grade = userInput.nextDouble();
userInput.nextLine() //add this to your program
System.out.println("Would you like to continue entering grades? (y/n)");
enterAgain = userInput.nextLine();
while(enter){
if(enterAgain.equalsIgnoreCase("y")){
System.out.println("Please enter another grade: ");
/*enterAgain = userInput.nextLine() - we want user to input
a double grade, not a String*/
grade = userInput.nextDouble();
}
else if(enterAgain.equalsIgnoreCase("n")){
System.out.println("Ok. Don't enter more grades.");
break;
}
else{
System.out.println("Sorry, you can only enter (y/n)");
break;
}
}
}
}
else{} 语句中的 break;
语句用于在用户输入 n 表示否(或 y 或 n 之外的其他随机字符)后从 运行 停止循环。例如,循环将输出 "Ok. Don't enter more grades." 并停在那里。如果我们不包含 break;
语句,它将无限打印出来。
好的,根据我的经验,根据您的代码,这似乎是一个相当难以解决的问题。我找到了一种在 "continue entering grades?" 问题之后获取 if 语句的解决方案。将 enterAgain 变量设置为 userInput.next();这将允许程序继续其路径。虽然,从那里开始,我遇到了一个问题,即在您说 "y or n" 之后程序结束。这里:
System.out.println("Would you like to continue entering grades? (y/n)");
enterAgain = userInput.next();
此代码将允许您输入内容,但它不显示 "Please enter another grade."这是我能够想出的唯一解决方案。也可以尝试使用 switch 语句或 while 循环在您的程序中试验结果。祝你好运。
我正在开发一个平均成绩的程序。出于某种原因,我的扫描仪或控制台不允许我输入第三个问题的答案,我不确定为什么。
很多代码都被注释掉了,因为现在不需要了。
编辑:我不确定如何在此处对代码行编号,但我认为第 23-28 行是问题所在
import java.text.DecimalFormat;
import java.util.Scanner;
public class GradeData {
public static void main(String[] args) {
int count = 0;
double grade = 0;
//decided to use double for grade in case user's want to be specific with
//decimal points.
String user;
boolean enter;
String name;
String enterAgain;
Scanner userInput = new Scanner(System.in);
System.out.println("Please enter your name: ");
name = userInput.nextLine();
System.out.println("Please enter a grade: ");
grade = userInput.nextDouble();
//System.out.println(user); //May not need this line
System.out.println("Would you like to continue entering grades? (y/n)");
enterAgain = userInput.nextLine();
if (enterAgain.equalsIgnoreCase("y"))
/*|| enterAgain.equalsIgnoreCase("Yes"))*/ {
System.out.println("Please enter another grade: "); }
/* if (user.getScore() > highScore) {
highScore = user.getScore();
}
System.out.println("High Score: "
+ DecimalFormat.format(grade));
user.setScore(0);
}*/
else {
enter = false;
userInput.close();
}
}
}
查看@Fast Snail 评论的 link (Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods) - 它解释了您的问题。要解决这个问题,如post所示,在userInput.nextDouble()
之后添加一个userInput.nextLine()
。这是完成的代码(我删除了一些不相关的注释和变量):
import java.util.Scanner;
public class GradeData{
public static void main(String[] args){
double grade = 0;
String name;
String enterAgain;
boolean enter = true; //to use in while loop
Scanner userInput = new Scanner(System.in);
System.out.println("Please enter your name: ");
name = userInput.nextLine();
System.out.println("Please enter a grade: ");
grade = userInput.nextDouble();
userInput.nextLine() //add this to your program
System.out.println("Would you like to continue entering grades? (y/n)");
enterAgain = userInput.nextLine();
while(enter){
if(enterAgain.equalsIgnoreCase("y")){
System.out.println("Please enter another grade: ");
/*enterAgain = userInput.nextLine() - we want user to input
a double grade, not a String*/
grade = userInput.nextDouble();
}
else if(enterAgain.equalsIgnoreCase("n")){
System.out.println("Ok. Don't enter more grades.");
break;
}
else{
System.out.println("Sorry, you can only enter (y/n)");
break;
}
}
}
}
else{} 语句中的 break;
语句用于在用户输入 n 表示否(或 y 或 n 之外的其他随机字符)后从 运行 停止循环。例如,循环将输出 "Ok. Don't enter more grades." 并停在那里。如果我们不包含 break;
语句,它将无限打印出来。
好的,根据我的经验,根据您的代码,这似乎是一个相当难以解决的问题。我找到了一种在 "continue entering grades?" 问题之后获取 if 语句的解决方案。将 enterAgain 变量设置为 userInput.next();这将允许程序继续其路径。虽然,从那里开始,我遇到了一个问题,即在您说 "y or n" 之后程序结束。这里:
System.out.println("Would you like to continue entering grades? (y/n)");
enterAgain = userInput.next();
此代码将允许您输入内容,但它不显示 "Please enter another grade."这是我能够想出的唯一解决方案。也可以尝试使用 switch 语句或 while 循环在您的程序中试验结果。祝你好运。