无法完成扫描仪的输入

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 循环在您的程序中试验结果。祝你好运。