为什么我的扫描仪会重复?

时间:2014-12-31 07:04:39

标签: java java.util.scanner

我正在尝试制作GPA计算器,但在代码的早期我开始遇到问题;这是代码段:

    Scanner input = new Scanner(System.in);

    System.out.println("How many grades are you putting? ");
    int length = input.nextInt();

    String[] gradesArray = new String[length];

    for(int i = 0; i < gradesArray.length; i++)
    {
        System.out.println("Enter grade (include + or -) ");
        gradesArray[i] = input.nextLine();
    } 

一切顺利,直到“输入等级(包括+或 - )”部分,它重复两次,所以当我编译并到达那个部分时,它说“输入等级(包括+或 - )输入等级(包括+或 - )“在我输入任何东西之前。我该如何解决这个重复的问题?因为我认为它也需要一个等级。

1 个答案:

答案 0 :(得分:2)

您可以通过添加

来解决此问题
input.nextLine();

int length = input.nextInt();

这将确保在您尝试读取更多输入之前消耗包含该整数的行的末尾。

Scanner input = new Scanner(System.in);

System.out.println("How many grades are you putting? ");
int length = input.nextInt();
input.nextLine();

String[] gradesArray = new String[length];

for(int i = 0; i < gradesArray.length; i++)
{
    System.out.println("Enter grade (include + or -) ");
    gradesArray[i] = input.nextLine();
} 

进一步解释:

调用input.nextInt()尝试从标准输入读取单个标记并将其转换为int。键入该整数并按Enter键后,输入流仍包含行尾字符[s],input.nextInt()尚未读取该字符[s]。因此,第一次调用input.nextLine()时,它会读取这些字符,然后丢弃它们(因为input.nextLine()会删除换行符),最后会得到一个空字符串。该空字符串被分配给gradesArray [0],循环立即进行到下一次迭代。在循环之前添加input.nextLine()可以解决问题。