2015-06-12 3 views
0

Я пытаюсь взять пользовательский ввод для имени, фамилии, номера телефона и возраста.Сканер, игнорирующий строку «name»

По какой-то странной причине сканер пропускает имя, но ни одна из других переменных.

Может кто-нибудь указать на мою ошибку, пожалуйста? Я не могу понять.

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]); 
     } 
     } 
    } 
} 

ответ

0

Добавить

input.nextLine(); 

после вашего

int options = input.nextInt(); 

Это происходит потому, что:

  • nextInt метод не читаетпоследнего символ новой строки (ваш целый вход)
  • , что символ новая строка потребляются в следующем вызове nextLine
  • вызывая имя «чтобы быть пропущена»
  • так что вам нужно «смывать» в новой строки характер после получения целого ввода

другой вариант:

  • Возьмите по всей линии, используя input.nextLine()
  • Получить целое значение, используя Integer.parseInt() для извлечения значения целого
+0

Спасибо! Легко исправить :) –

+0

@d_PI Да, это простое решение. Но хорошо понять, почему это произошло. :) – Gosu

0

Он вприпрыжку имя, потому что, input.nextInt() не пойдет к следующей строке ввода. Вы можете использовать

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

, то он не будет показывать имя.

Смежные вопросы