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

标签 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();
    } 

一切都很顺利,直到“输入成绩(包括+或-)”部分,它重复两次,所以当我编译并到达该部分时,它会说“输入成绩(包括+或-)输入成绩(包括+或 -) "在我可以输入任何内容之前。如何解决这个重复出现的问题?因为我认为它也占据了一年级的位置。

最佳答案

您可以通过添加来解决此问题

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 键后,输入流仍包含行尾字符,而 input.nextInt() 尚未读取该字符。因此,第一次调用 input.nextLine() 时,它会读取这些字符,然后丢弃它们(因为 input.nextLine() 会去除换行符),然后结束得到一个空字符串。该空字符串被分配给gradesArray[0],并且循环立即进行到下一次迭代。在循环之前添加 input.nextLine() 可以解决问题。

关于java - 为什么我的扫描仪会重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27717503/

相关文章:

java - 不同的 JVM 是什么意思

java - 调用重绘时 JTable 不重绘

Java Scanner 类读取字符串

java - 使用数组和长数据类型会导致精度损失

java - 要求输入直到他输入数字?

java - hibernate的Merge方法如何判断对象是要保存还是要更新?

Java程序开始使用Windows任务计划程序,但未在批处理文件夹中创建日志文件

java - 空指针异常的解释

java - Spring数据聚合查询elasticsearch

java - 在列表中找到最高和最低值,现在需要找到它们的位置(java)