3

私は技術で行っているコースで演習のアプリケーションを書いています。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ループでは、1 回ループし、入力した本のタイトル、著者、および入力したページ数を表示します。しかし、2回目は「書籍のタイトルを入力してください」と表示され、println入力を待たずに2番目にスキップします。私はオブジェクトの配列とJava全般に不慣れなので、助けていただければ幸いです。前もって感謝します。

4

3 に答える 3

2

推測させてください、ページ数として「13<enter>」のようなものを入力していますよね?

プログラムの使い方が間違っています。本のページ数の後で Enter キーを押さないでください。次の本のタイトルをスペースなどを入れずにすぐに入力します。コードは整数を読み取り、次にタイトルの行を読み取ります。したがって、コードが期待するものではないため、整数とタイトルの間に何も入れることはできません。

ただし、タイトルを入力した後にタイトルを入力するプロンプトが表示されるため、プログラムは非常に使いにくくなります。プログラムを書くのはかなりばかげた方法だと思いませんか?

簡単な修正: afterkb.nextIntを呼び出しkb.nextLineて、空行を捨てます。

于 2012-05-16T05:10:21.730 に答える
1

この行:

name = kb.nextLine();

改行文字が見つかるまでできるだけ多くの文字を読み取り、その文字も読み取ります。この行に対して:

pages = kb.nextInt();

一連の数値文字を読み取っていますが、改行文字はそのままにしておきます。

次にループを通過すると、まだ読み取られていない改行文字がぶら下がっています。そのため、kb.nextLine() はその文字を (その前に文字がなくても) 忠実に読み取り、続行します。

おそらくやりたいことは、次のループを回る前に、この余分な改行文字が入力バッファーから削除されていることを確認することです。

于 2012-05-16T05:18:03.250 に答える
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 として読み取ります。

于 2012-05-16T05:21:49.787 に答える