2016-08-24 3 views
0

Ich habe gerade Java gestartet und wollte mit der Syntax basteln. Immer wenn ich "F" in gender und age einlege, die größer als oder gleich 20 sind, sollte ich aufgefordert werden, einzugeben, wenn der Benutzer verheiratet ist oder nicht, aus irgendeinem Grund überspringt der Scanner es über. Alles andere funktioniert gut.Scanner überspringt Eingabe, möglicher Leerraum?

Output Ich erhalte:

Whats is your gender (M or F): F 
First name: Kim 
Last name: Kardashian 
Age: 32 

Are you married, Kim (Y or N)? 
Then I shall call you Ms. Kardashian. 

Code:

import java.util.Scanner; 

public class GenderGame 
{ 

    public static void main(String[] args) 
    { 
     Scanner sc = new Scanner(System.in); 

     int age = 0; 
     String Gender = null, fName = null, lName = null, M = null, type = null; 

     System.out.print("Whats is your gender (M or F): "); 
     Gender = sc.nextLine(); 
     Gender = Gender.toUpperCase(); 

     System.out.print("First name: "); 
     fName = sc.nextLine(); 

     System.out.print("Last name: "); 
     lName = sc.nextLine(); 

     System.out.print("Age: "); 
     age = sc.nextInt(); 

     if(Gender.equals("F") && age >= 20) 
     { 
      System.out.print("\nAre you married, " + fName + " (Y or N)? "); 
      M = sc.nextLine(); 
      M = M.toUpperCase(); 

      if(M.equals("Y")) 
      { 
       type = "Mrs. "; 
       type = type.concat(lName); 
      } 
      else 
      { 
       type = "Ms. "; 
       type = type.concat(lName); 
      } 
     } 
     else if(Gender.equals("F") && age < 20) 
     { 
      type = fName.concat(" " + lName); 
     } 
     else if(Gender.equals("M") && age >= 20) 
     { 
      type = "Mr. "; 
      type = type.concat(lName); 
     } 
     else if(Gender.equals("M") && age < 20) 
     { 
      type = fName.concat(" " + lName); 
     } 
     else 
     { 
      System.out.println("There was incorrect input. EXITING PROGRAM"); 
      System.exit(1); 
     } 

     System.out.println("\nThen I shall call you " +type+ "."); 

    } 

} 

Antwort

1

Die nextInt() Methode der Scanner verlässt die Zeilenendmarke aus, das heißt, es nicht es konsumieren. Dieses Newline-Zeichen wird von Ihrer nextLine()-Methode verbraucht, weshalb Sie es nicht auf Ihre Eingabe warten sehen.

Um dies zu vermeiden, rufen Sie sc.nextLine() nach age = sc.nextInt();, dann lassen Sie den Rest des Codes unverändert.

 ... 
     System.out.print("Age: "); 
     age = sc.nextInt(); 
     sc.nextLine(); //added 

     if(Gender.equals("F") && age >= 20) 
     { 
      System.out.print("\nAre you married, " + fName + " (Y or N)? "); 
      M = sc.nextLine(); 
      M = M.toUpperCase(); 

      if(M.equals("Y")) 
      { 
       type = "Mrs. "; 
       type = type.concat(lName); 
      } 
     ... 
Verwandte Themen