扫描仪忽略字符串"名称"

时间:2015-06-12 04:36:03

标签: java multidimensional-array java.util.scanner

我正在尝试为用户输入姓名,姓氏,电话号码和年龄。

由于某些奇怪的原因,扫描仪正在跳过名称,但没有其他变量。

有人可以指出我的错误吗?我无法弄清楚。

import java.util.Scanner;
public class Lab2{

   String [][] info = new String [10][4];

   public static void main(String [] args){
      new Lab2();   
   }

   public Lab2(){ 

      Scanner input = new Scanner(System.in);


      System.out.println();
      System.out.println("Student contact Interface");
      System.out.println("Please select a number from the options below:");


      while(true){

         System.out.println("1: Add a new contact.");
         System.out.println("2: Remove an existing contact."); 
         System.out.println("3: Display the contact list.");          
         System.out.println("0: Exit the contact list.");
         int options = input.nextInt();


         String name, lastName, number, age;                         
         switch(options){
            case 1: 

               System.out.println("Please enter the name: ");
               name = input.nextLine(); // This is the String var that is not accepting input from...

               System.out.println("Please enter the  last name: ");
               lastName = input.nextLine();

               System.out.println("Please enter the phone number: ");
               number = input.nextLine();

               System.out.println("Please enter the age (eg. 25): ");
               age = input.nextLine();

               addStudent(name, lastName, number, age);
               break;

            case 2:
               System.out.println("\nEnter the name to remove: ");
               String delName = input.nextLine();

              System.out.println("\nEnter the last name to remove: ");
               String delLastName = input.nextLine();

               remove(delName, delLastName);
               break;

            case 3: 
               display();
               break;

            case 0: 
               System.out.println("Thank you for using the contact Database.");
               System.exit(0);
            }

         }
     }


   public void addStudent (String name, String lastName, String number, String age){

      boolean infoInserted = false;
      for(int i = 0; i < 10; i++){
         if(info[i][0] == null || info[i][0].equals(null)){

         info[i][0] = name;
         info[i][1] = lastName;
         info[i][2] = number;
         info[i][3] = age;
         infoInserted = true;
         break;

           }
        }
        if(infoInserted){
            System.out.println("\nContact saved.\n");
            }
        else{         
         System.out.println("\nYour database is full.\n");
          }
  }

   public void remove(String delName, String delLastName){ 

      boolean removed = false;
      int i = 0;
      for (i = 0; i < 10; i++) {
         if (info[i][0] != null && !info[i][0].equals(null)) {
         if (info[i][0].equals(delName) && info[i][1].equals(delLastName)) {

         while (i < 9) {
         info[i][0] = info[i + 1][0];
         info[i][1] = info[i + 1][1];
         info[i][2] = info[i + 1][2];
         info[i][3] = info[i + 1][3];
         i++;
         }

         info[9][0] = null;
         info[9][1] = null;
         info[9][2] = null;
         info[9][3] = null;
         removed = true;
         break;
         }
         }
         }
      if (removed) {
         System.out.println("Contact removed.");
         }
      else {
      System.out.println("Contact was not found.");
      }


   }


   public void display (){

     for (int i = 0; i < 10; i++) {
         if (info[i][0] != null && !info[i][0].equals(null)) {
            System.out.println("Contact " + (i + 1)+ ":");
            System.out.println("\t" + info[i][0]);
            System.out.println("\t" + info[i][1]);
            System.out.println("\tPhone Number:" + info[i][2]);
            System.out.println("\tAge:" + info[i][3]);
         }
      }
   }
}

2 个答案:

答案 0 :(得分:0)

添加

input.nextLine();

之后

int options = input.nextInt();

这是因为:

  • nextInt方法无法读取 最后一个换行符(整数输入)
  • 在下一次调用nextLine
  • 时会消耗换行符
  • 导致名称'被跳过'
  • 所以你需要在获得整数输入后'冲走'换行符

另一种选择:

  • 使用input.nextLine()
  • 接收整行
  • 使用Integer.parseInt()获取整数值以提取整数值

答案 1 :(得分:0)

它正在跳过名称,因为input.nextInt()不会转到下一个输入行。 你可以使用

int option=Integer.parseInt(input.nextLine());

然后它不会跳过名字。