Scanner ignoring the String "name"

112 views Asked by At

I am trying to take user input for name, last name, phone number and age.

For some odd reason the scanner is skipping name but none of the other variables.

Can someone point out my mistake please? I can't figure it out.

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

There are 2 answers

1
almightyGOSU On BEST ANSWER

Add a

input.nextLine();

after your

int options = input.nextInt();

This is because:

  • nextInt method does not read the last newline character (of your integer input)
  • that newline is consumed in the next call to nextLine
  • causing name 'to be skipped'
  • so you need to 'flush away' the newline character after getting the integer input

Another option:

  • Take in the entire line, using input.nextLine()
  • Get the integer value using Integer.parseInt() to extract the integer value
0
Shettyh On

It is skipping name because , input.nextInt() wont go to next input line. You can use

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

then it wont skip name.