我正在尝试制作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();
}
一切顺利,直到“输入等级(包括+或 - )”部分,它重复两次,所以当我编译并到达那个部分时,它说“输入等级(包括+或 - )输入等级(包括+或 - )“在我输入任何东西之前。我该如何解决这个重复的问题?因为我认为它也需要一个等级。
答案 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()
可以解决问题。