-1

ArrayList に保存される人の名前を入力するようにユーザーに依頼し、別の ArrayList にも保存される同じ人の電話番号を入力するようにユーザーに依頼するコンストラクターを作成したいと考えています。ユーザーが「いいえ」を入力しない限り、これはループし続ける必要があります。これにより、ループが終了します。

ただし、デモクラスでメソッドを実行すると、最初の反復は正常に機能しますが、2回目のタイムアウトでは、ユーザーの名前の入力をスキップして電話番号の入力に直接ジャンプするため、機能しません。

私は正確に何を間違っていますか?

public PhoneBookEntry()
{
    System.out.println("Enter the following requested data.");
    System.out.println("");
    int i=0;
    while(i==0)
    {       
        System.out.println("Enter the name of the person (enter 'no' to end): ");
        input_name = kb.nextLine();
        if(!input_name.equalsIgnoreCase("no"))
        {
            name.add(input_name);
            System.out.println("Enter the phone number of that person (enter '-1' to end): ");
            input_number = kb.nextLong();
            phone_number.add(input_number);
        }
        else
        {
            name.trimToSize();
            break;
        }

        System.out.println("");
    }
}
4

1 に答える 1

3

問題は Scanner オブジェクトにあります。Scannerおよび、、nextLong()などの同様のメソッドは、行末 (EOL) トークンを処理しないことを理解してください。自分で処理するには苦労する必要があります。nextInt()nextDouble()next()

nextLine()1 つの方法は、次のように呼び出しを追加することです。

    System.out.println("Enter the name of the person (enter 'no' to end): ");
    input_name = kb.nextLine();
    if(!input_name.equalsIgnoreCase("no"))
    {
        name.add(input_name);
        System.out.println("Enter the phone number of that person (enter '-1' to end): ");
        input_number = kb.nextLong();
        phone_number.add(input_number);

これに:

    System.out.println("Enter the name of the person (enter 'no' to end): ");
    input_name = kb.nextLine();
    if(!input_name.equalsIgnoreCase("no"))
    {
        name.add(input_name);
        System.out.println("Enter the phone number of that person (enter '-1' to end): ");
        input_number = kb.nextLong();
        kb.nextLine();  // **** added to handle the EOL ****
        phone_number.add(input_number);

はい、コメントは正しいです-これはひどいコンストラクタです。コンストラクターは、ユーザーと直接やり取りするためのものではなく、オブジェクトを作成するためのものです。

于 2013-03-09T03:59:06.763 に答える