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"。我该怎么做呢。
答案 0 :(得分:3)
在第一次迭代中,nextFloat()
不使用任何换行符。在第二次迭代中,nextLine()
方法将使用第一次迭代中留下的换行符。结果,似乎第二次迭代中的nextLine()
方法跳过了用户输入,而它只是消耗了上一次迭代中留下的换行符。
解决此问题的一种方法是在nextLine()
之后调用nextFloat()
以使用剩余的新行字符。
答案 1 :(得分:1)
你可以放置
s.nextLine();
在循环结束时使用换行符。目前Scanner.getFloat()
正在将换行符传递给您的语句:
name = s.nextLine();
不阻止,因为它已提供此角色。