【问题标题】:why does the program skip over the name i need to be inputted为什么程序会跳过我需要输入的名字
【发布时间】:2012-11-29 23:29:56
【问题描述】:
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”。我该如何阻止它。

【问题讨论】:

  • 考虑下一次发布代码时少一点空格。您不必要的开放空间使您的代码有点难以阅读。请记住,良好的代码格式对我们的好处比对您的好处更大,但是如果我们能够轻松阅读和理解您的代码,我们可以为您提供更好的帮助,那么它也对您有利。
  • 这个问题类似于stackoverflow.com/q/6289765/130224

标签: java


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以放置

    s.nextLine();
    

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

    name = s.nextLine();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2021-05-16
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多