我的java for循环跳过了一步

时间:2012-05-16 05:06:37

标签: java loops for-loop java.util.scanner

我正在写一份我在科技课程中练习的练习。它应该实例化类Book的5个对象,其中包含书籍标题,作者和页数的数据字段。我遇到for.. loop的问题。它在第一次循环后每次跳过一步,我无法弄清楚原因。这是我的代码

import java.util.*;
public class LibraryBook2
{
    public static void main(String[]args)
{
    String name;
    String author;
    int pages;
    Book[] novel = new Book[5];
    novel[0] = new Book();
    novel[1] = new Book();
    novel[2] = new Book();
    novel[3] = new Book();
    novel[4] = new Book();
    Scanner kb = new Scanner(System.in);
    for (int i = 0; i< novel.length;)
    {   
        System.out.println("Please Enter the books title");
        name = kb.nextLine();
        novel[i].setTitle(name);
        System.out.println("Please enter the books author");
        author = kb.nextLine();
        novel[i].setAuthor(author);
        System.out.println("Please enter the number of pages in this book");
        pages = kb.nextInt();
        novel[i].setPages(pages);
        System.out.println(""+novel[i].title);
        System.out.println(""+novel[i].author);
        System.out.println(""+novel[i].pages);
        ++i;
    }
    for (int x = 0; x<novel.length; x++)
    {
    System.out.print(""+ novel[x].title + "\n" + novel[x].author + "\n" + novel[x].pages);
    }
  }
}

在第一个for循环中,它循环一次,打印书的标题,作者和我输入的页数,就像它应该的那样。但第二次,它打印“请输入书籍标题”然后直接跳到第二个println而不等待输入。我是对象数组和java的新手,所以任何帮助都是值得赞赏的。 提前谢谢。

3 个答案:

答案 0 :(得分:2)

让我猜,您输入类似“13&lt; enter&gt;”的内容对于页数,对吧?

您使用的程序错误。不要在书中的页数后按Enter键。立即输入下一本书的标题,没有空格或任何东西。代码读取整数,然后读取标题行。因此,您不能在整数和标题之间放置任何,因为这不是代码所期望的。

这使得该程序非常难以使用,因为在您输入标题后将出现输入标题的提示。这是编写程序的一种非常愚蠢的方式,你不觉得吗?

一个简单的修复:在kb.nextInt之后,调用kb.nextLine并抛弃空行。

答案 1 :(得分:1)

这一行:

name = kb.nextLine();

正在读取尽可能多的字符,直到找到新的行字符,然后读取该字符。而这一行:

pages = kb.nextInt();

正在读取一系列数字字符,但保持新行字符不变。

下次你完成循环时,会有一个新的线条字符悬在其中尚未被读取。所以kb.nextLine()尽职尽责地读取该字符(即使之前没有字符)并继续。

你可能想要做的是确保在下一次循环之前,这个额外的换行符从输入缓冲区消失。

答案 2 :(得分:0)

更改代码如下:

public static void main(String []arg){
    String name;
    String author;
    String pages;
    Book[] novel = new Book[2];
    novel[0] = new Book();
    novel[1] = new Book();
    novel[2] = new Book();
    novel[3] = new Book();
    novel[4] = new Book();
    Scanner kb = new Scanner(System.in);
    for (int i = 0; i< novel.length;)
    {   
        System.out.println("Please Enter the books title");
        name = kb.nextLine();
        novel[i].setTitle(name);
        System.out.println("Please enter the books author");
        author = kb.nextLine();
        novel[i].setAuthor(author);
        System.out.println("Please enter the number of pages in this book");
        pages = kb.nextLine();
        novel[i].setPages(Integer.parseInt(pages));
        System.out.println(""+novel[i].title);
        System.out.println(""+novel[i].author);
        System.out.println(""+novel[i].getPages());
        ++i;
    }
    for (int x = 0; x<novel.length; x++)
    {
    System.out.print(""+ novel[x].title + "\n" + novel[x].author + "\n" + novel[x].pages);
    }

将页码读取为nextLine,而不是整数。