为什么程序会跳过我需要输入的名称

时间:2012-11-29 23:29:57

标签: java

import java.util.Scanner;

public class ClassList {

    static final int SIZE = 10;

    public static void main(String Args[]) {

        Student[] students = new Student[SIZE];
        Scanner s = new Scanner(System.in);

        String name, id;
        float gpa;

        do {

            System.out.println("Enter a Student");
            name = s.nextLine();

            System.out.println("Enter a ID");
            id = s.nextLine();

            System.out.println("Enter a GPA");
            gpa = s.nextFloat();

        } while(!name.equals("quit"));
    }
}
基本上,当你运行这个程序时发生了什么,它会运行一个罚款,然后在第二次迭代,它将要求学生的名字。但它只会跳过用户输入的位置并进入"获取ID"。我该怎么做呢。

2 个答案:

答案 0 :(得分:3)

在第一次迭代中,nextFloat()不使用任何换行符。在第二次迭代中,nextLine()方法将使用第一次迭代中留下的换行符。结果,似乎第二次迭代中的nextLine()方法跳过了用户输入,而它只是消耗了上一次迭代中留下的换行符。

解决此问题的一种方法是在nextLine()之后调用nextFloat()以使用剩余的新行字符。

答案 1 :(得分:1)

你可以放置

s.nextLine();

在循环结束时使用换行符。目前Scanner.getFloat()正在将换行符传递给您的语句:

name = s.nextLine();

阻止,因为它已提供此角色。