2

私が取っているJavaクラスのために書いたContactクラスとContactBookクラスのメニューを提供するためのメインメソッドを書いています。私の問題は、ユーザーが A、F、P、または Q のいずれかを入力すると、スキャナー オブジェクト (kbd) が入力をキャプチャして使用し、次の入力が入力されると次に進むと予想していたことです。リターンを押しても、期待どおりにプログラムが進行するとは限らないため、理解していない重要なものがあることは明らかです。コードと出力を含めました。どんなヒントでも大歓迎です。

  import java.util.Scanner;
  public class run{
  public static void main(String[]args){
      Scanner kbd = new Scanner(System.in);
      boolean quit = false;
      System.out.println("How many contacts would you like in your Contact Book?: ");
      int size = kbd.nextInt();
      kbd.nextLine();
      ContactBook kevin = new ContactBook(size);
      while(!quit){
         System.out.println("A - Add a contact \n"+
                            "F - Find a contact \n"+
                            "P - Prints the list \n"+
                            "Q - Quits");


         if(kbd.next().equals("A")){
            if(ContactBook.full(kevin))
               System.out.println("Contact book full!");
            else{
               Contact temp = new Contact();
               System.out.println("Enter a First Name: ");
               temp.setFirstName(kbd.nextLine());
               System.out.println("Enter a Last Name: ");
               temp.setLastName(kbd.nextLine());
               System.out.println("Enter a Phone Number: ");
               temp.setPhoneNumber(kbd.nextLine());
               System.out.println("Enter an email: ");
               temp.setEmail(kbd.nextLine());
               kevin.addContact(temp);
            }
         }
         if(kbd.next().equals("F")){
            kevin.search();
         }
         if(kbd.next().equals("P")){
            System.out.print(kevin.produce());
         }
         if(kbd.next().equals("Q")){
            quit = true;
         }
      }
   }
}

これが私が得ている出力です。

 ----jGRASP exec: java run
How many contacts would you like in your Contact Book?: 
3
A - Add a contact 
F - Find a contact 
P - Prints the list 
Q - Quits
A
Enter a First Name: 
Kevin
Enter a Last Name: 
Smith
Enter a Phone Number: 
312-4567
Enter an email: 
kevin@gmail.com



 //here I keep pushing enter and am not sure why it doesn't continue back to
 //the beginning of my while loop



a
a
a
A - Add a contact 
F - Find a contact 
P - Prints the list 
Q - Quits

a

 ----jGRASP: process ended by user.

 ----jGRASP exec: java run
How many contacts would you like in your Contact Book?: 

 ----jGRASP: process ended by user.

 ----jGRASP exec: java run
How many contacts would you like in your Contact Book?: 
4
A - Add a contact 
F - Find a contact 
P - Prints the list 
Q - Quits
A
Enter a First Name: 
Enter a Last Name: 
Smith
Enter a Phone Number: 
312-4567
Enter an email: 
kevin@gmail.com

a
s
d
A - Add a contact 
F - Find a contact 
P - Prints the list 
Q - Quits

繰り返しますが、私は学生で、これは 2 回目の Java クラスです。私が間違っていることを理解するために多くのリソースをチェックしましたが、それをつなぎ合わせることができませんでした. うまくいけば、誰かが私のためにこれに光を当てることができます. ありがとう。

4

1 に答える 1

3

私はへのすべての呼び出しを取り除き、にkbd.next()置き換えkbd.nextLine()ます。ここで使用する必要はありnext()ません。また、行末トークンを処理しないため、混乱する可能性があります。どうしてもを使用する必要がある場合は、呼び出し後kbd.next()に必ず呼び出して、プログラムが行末トークンを合理的な方法で処理できるようにしてください。kbd.nextLine()next()

于 2012-11-16T04:30:33.927 に答える