2016-03-27 8 views
0
 System.out.print("Input the number of persons: "); 
    Scanner scanner = new Scanner(System.in); 
    int noOfP = scanner.nextInt(); 

    Person[] person = new Person[noOfP]; 

    String name; 
    int age; 
    for(int i = 0; i < person.length; i++){ 
     System.out.println("Input name for guest: "); 
     name = scanner.nextLine(); 
     System.out.println("Input age for guest: "); 
     age = scanner.nextInt(); 

     person[i] = new Person(name,age); 
    } 

Ich wollte nur die Person Array initialisieren und den Namen und das Alter festgelegt, aber es wirft Linie ein InputMismatchException bei age = scanner.nextInt();Warum ein InputMismatchException es in meinem Code ist

+0

Versuchen Sie, den Code zu ändern und sehen, was passiert. Kommentieren Sie einige Zeilen, fügen Sie eine Druckanweisung hinzu und sehen Sie, was passiert. Aber meine Vermutung wäre, dass Sie eine Zeichenfolge eingeben, wenn sie eine Zahl erwartet. – eddyparkinson

Antwort

1

Wenn Sie nach der Anzahl der Personen fragen, gibt der Benutzer nicht nur eine Nummer ein, sondern fügt auch einen Zeilenabschluss in den Eingabestrom ein. Wenn Sie also nach dem Namen fragen, erhalten Sie den Namen nicht, Sie erhalten den Zeilenabschluss kurz vor dem Namen. Und dann, wenn Sie die .nextInt() für das Alter tun, bekommen Sie endlich den Namen. Das erste, was Sie tun müssen, ist scanner.nextLine() hinzuzufügen, nachdem Sie den Wert noOfP gelesen haben, um diesen Zeilenabschluss zu überspringen. Das wird Dinge durch das Alter der ersten Person reparieren. Und dann fangen die Dinge wieder an zu brechen.

Sie tun dasselbe, wenn Sie nach dem Alter fragen: Sie rufen scanner.nextInt() auf und lassen einen anderen Zeilenabschluss im Stream. Du brauchst danach noch eine scanner.nextLine(), damit die zweite Person nicht explodiert.

Der Code wird wie folgt aussehen:

System.out.print("Input the number of persons: "); 
Scanner scanner = new Scanner(System.in); 
int noOfP = scanner.nextInt(); 
scanner.nextLine(); 

Person[] person = new Person[noOfP]; 

String name; 
int age; 
for(int i = 0; i < person.length; i++){ 
    System.out.println("Input name for guest: "); 
    name = scanner.nextLine(); 
    System.out.println("Input age for guest: "); 
    age = scanner.nextInt(); 
    scanner.nextLine(); 

    person[i] = new Person(name,age); 
} 
+2

Danke, das hilft sehr. – ZDunker

1

Wenn Sie nach scanner.nextInt() der Eingabetaste drücken, das Ende Newline-Charakter wird nie entfernt. Ich fand es immer am einfachsten, Integer.parseInt(scanner.nextLine()) anstelle von scanner.nextInt() aus diesem Grund zu verwenden; Diese Probleme treten nie auf.

Verwandte Themen