1
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”。我该如何阻止它。

4

2 回答 2

3

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

解决此问题的一种方法是调用nextLine()afternextFloat()以消耗剩余的换行符。

于 2012-11-29T23:30:56.250 回答
1

你可以放置

s.nextLine();

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

name = s.nextLine();

没有阻塞,因为它已经提供了这个字符。

于 2012-11-29T23:31:03.537 回答