我的java for循环跳过了一步

我的java for循环跳过了一步,java,loops,for-loop,java.util.scanner,Java,Loops,For Loop,Java.util.scanner,我正在为我在技术学院的一门课程中的一个练习编写一个应用程序。它应该实例化Book类的5个对象,其中包含一本书的标题、作者和页数的数据字段。我对..的有问题。。循环。它在第一个循环后每次跳过一步,我不知道为什么。这是我的密码 import java.util.*; public class LibraryBook2 { public static void main(String[]args) { String name; String author; int pa

我正在为我在技术学院的一门课程中的一个练习编写一个应用程序。它应该实例化
Book
类的5个对象,其中包含一本书的标题、作者和页数的数据字段。我对..的
有问题。。循环
。它在第一个循环后每次跳过一步,我不知道为什么。这是我的密码

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);
    }
  }
}
import java.util.*;
公共类图书馆2
{
公共静态void main(字符串[]args)
{
字符串名;
字符串作者;
整版;
书[]小说=新书[5];
小说[0]=新书();
新颖的,新颖的【1】=新书;
新颖的,新颖的,新颖的;
新颖的,新颖的【3】=新书;
新颖的,新颖的【4】=新书;
扫描仪kb=新扫描仪(System.in);
for(int i=0;i对于(intx=0;x让我猜一下,您键入的页数类似于“13”,对吗

您使用的程序错误。请勿在书中的页数后按enter键。立即键入下一本书的标题,不带空格或任何内容。代码读取一个整数,然后读取标题行。因此,您不能在整数和标题之间放置任何内容,因为这不是代码所期望的

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

一个简单的解决方法:在
kb.nextInt
之后,调用
kb.nextLine
并扔掉空行。

此行:

name = kb.nextLine();
正在读取尽可能多的字符,直到找到新行字符,然后再读入该字符。而此行:

pages = kb.nextInt();
正在读取一系列数字字符,但保留新行字符不变

下一次循环时,有一个新行字符悬空,尚未读取。因此kb.nextLine()会尽职尽责地读取该字符(即使前面没有字符),然后继续


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

如下更改代码:

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);
    }
publicstaticvoidmain(字符串[]arg){
字符串名;
字符串作者;
字符串页;
书[]小说=新书[2];
小说[0]=新书();
新颖的,新颖的【1】=新书;
新颖的,新颖的,新颖的;
新颖的,新颖的【3】=新书;
新颖的,新颖的【4】=新书;
扫描仪kb=新扫描仪(System.in);
for(int i=0;i感谢(int x=0;x)谢谢你,你的答案就是我实现的答案。我也感谢所有帮助过你的人。