Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java作业-使用next()和nextLine()方法扫描对象_Java_Java.util.scanner - Fatal编程技术网

Java作业-使用next()和nextLine()方法扫描对象

Java作业-使用next()和nextLine()方法扫描对象,java,java.util.scanner,Java,Java.util.scanner,我正在编写一个main方法来为Contact类和ContactBook类提供菜单,这是我为正在使用的java类编写的。我的问题是,我希望当用户输入A、F、P或Q时,我的扫描对象(kbd)将捕获输入,使用它,并在输入下一个输入后继续。很明显,有些关键的事情我并不理解,因为推动回归并不总是像我预期的那样推进我的计划。我已经包括了我的代码和输出。任何提示都将不胜感激 import java.util.Scanner; public class run{ public static void

我正在编写一个main方法来为Contact类和ContactBook类提供菜单,这是我为正在使用的java类编写的。我的问题是,我希望当用户输入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

同样,我是一名学生,这是我的第二个Java课程。我查阅了很多资料,试图了解我做错了什么,但我无法将其拼凑起来。希望有人能为我解释一下。谢谢。

我将取消对
kbd.next()
的所有调用,并将其替换为
kbd.nextLine()
。这里不需要使用
next()
,因为它不处理行尾标记,所以可能会把您搞砸。如果您确实需要使用
kbd.next()
,请确保在调用
next()
后调用
kbd.nextLine()
,以允许您的程序以合理的方式处理行尾标记。

不要调用
next()
在您的每个
if
语句中。@Shakedown:您的评论应该展开,并且应该是一个答案。这太好了,不能只是一个评论。