1

私は Java の 2 学期目に入ったばかりなので、おそらく私の問題に対する非常に簡単な解決策があると思いますが、そのために何時間も髪を引っ張っています。次のコードは、ユーザー入力を収集し、インスタンスの情報を配列に格納するために使用されています。

アルバム名は何も入力する機会がありません。出力は次のとおりです。

5曲入ります

Title: title
Author: author1
Interpreter : int1
リリース年: 2000
Album: File name: // なぜこれは入力を集めて File name: を次の行に配置しないのですか?

誰かが私を正しい方向に向けることができれば、私はそれを大いに感謝します. 私の問題に関係がある場合に備えて、以下の2つの方法を含めました. ご協力いただきありがとうございます。

    public static void main(String[] args){

    Scanner kybd = new Scanner(System.in);

    Song[] songTest = new Song[5];

    System.out.println("Enter 5 songs\n");


    //TEST
    for(Song x:songTest)
    {
        x = new Song();
        System.out.print("Title: ");
        x.setTitle(kybd.nextLine());
        System.out.print("Author: ");
        x.setAuthor(kybd.nextLine());
        System.out.print("Interpreter: ");
        x.setInterpreter(kybd.nextLine());
        System.out.print("Year released: ");
        x.setYearReleased(kybd.nextInt());
        System.out.print("Album: ");
        x.setAlbum(kybd.nextLine()); //this doesn't allow for input.  it prints "File name:" and skips the user input for an album name.  Also, when I comment out Year released, the problem goes away.
        System.out.print("File name: ");
        x.setFileName(kybd.nextLine());
        System.out.print(x);
        System.out.println();
    }


public void setYearReleased(int y)
{
    if (y>0 && y<2013)
        this.yearReleased = y;
    else
    {
        System.out.print ("This song is not that old");
        this.yearReleased = -5;
    }
}

    public void setAlbum(String a)
{
    this.album = a;
}
4

2 に答える 2

3

のEnterキーを押したときに使用される改行が以下でキャプチャされないように、 kybd.nextLine()afterを実行する必要があります。kybd.nextInt()kybd.nextLine()nextInt()

于 2012-09-23T19:09:08.593 に答える
2
x.setYearReleased(kybd.nextInt());

行末の文字には何もせず、表示された動作を与える行に残ります。簡単な修正はktbd.nextLine();、この後にもう1つ追加して、次のintの後の行の他のすべてをスキップすることです。

System.out.print("Year released: ");
x.setYearReleased(kybd.nextInt());
kybd.nextLine()
System.out.print("Album: ");
x.setAlbum(kybd.nextLine());
于 2012-09-23T19:09:36.463 に答える