为什么在此for循环中跳过keyboard.nextLine()? (Java)的

时间:2014-04-19 01:18:29

标签: java

到目前为止,这是我的代码:

System.out.println("How many different types of food do the gerbils eat?");

    Scanner keyboard = new Scanner(System.in);
    int numberofitems = keyboard.nextInt();


String[] fooditems = new String[numberofitems];

  for(int i=0; i<fooditems.length; i++){

      System.out.println("Name of food item " + (i+1) + ":");

      fooditems[i]= keyboard.nextLine();
  }

这是系统输出的样子:

沙鼠吃了多少种不同的食物?

5

食品1的名称:

食品2的名称:

红色药丸

食品名称3:

蓝色药丸

食品名称4:

绿色药丸

食品名称5:

橙色药丸

当提示时,数字5和不同的食物名称只是随机用户输入。

为什么不让我输入食品1的名称?

3 个答案:

答案 0 :(得分:1)

在nextInt()之后添加nextLine()以清除缓冲区。 试试这段代码:

System.out.println("How many different types of food do the gerbils eat?");

Scanner keyboard = new Scanner(System.in);
int numberofitems = keyboard.nextInt();
keyboard.nextLine();


String[] fooditems = new String[numberofitems];

for(int i=0; i<fooditems.length; i++){

  System.out.println("Name of food item " + (i+1) + ":");

  fooditems[i]= keyboard.nextLine();

}

答案 1 :(得分:0)

因为它在5之后读取(空)行的其余部分。在循环之前添加另一个调用以使用换行符。

答案 2 :(得分:0)

读取数字5后,输入仍然在缓冲区中有换行符,这意味着您对nextLine()的下一次调用将读取下一个换行符的输入,该换行符将读取空白。

相反,在读取数字后,通过添加以下行来消耗剩下的行:

keyboard.nextLine();