2016-12-29 1 views
0

Der Code funktioniert für die Eingabe von Name und Alter der Frau, aber nicht die Namen der Söhne zu drucken, obwohl es ihr Alter ordnungsgemäß anzeigt.Probleme mit Scanner-Klasse

import java.util.Scanner; 

public class Check2 
{ 
    public static void main(String[] args) 
    { 
    String wife; 
    String son1; 
    String son2; 
    int wifeAge; 
    int son1Age; 
    int son2Age; 

    Scanner keyboard = new Scanner(System.in); 

    System.out.println("Wife's name? "); 
    wife = keyboard.nextLine(); 
    System.out.println("Her age? "); 
    wifeAge = keyboard.nextInt(); 
    System.out.println(); 

    System.out.println("First son's name? "); 
    son1 = keyboard.nextLine(); 
    keyboard.nextLine(); 
    System.out.println("His age? "); 
    son1Age = keyboard.nextInt(); 
    System.out.println(); 

    System.out.println("Second son's name? "); 
    son2 = keyboard.nextLine(); 
    keyboard.nextLine(); 
    System.out.println("His age? "); 
    son2Age = keyboard.nextInt(); 
    System.out.println(); 

    keyboard.nextLine(); 

    System.out.println("My wife's name is " + wife + ". She is " + 
         wifeAge + " years old.\nOur first son is " + 
         son1 + ". He is " + son1Age + ".\nOur " + 
         "second son is " + son2 + ". He is " + 
         son2Age + "."); 
    } 
} 
+1

diese Zeilen lesen, löst Ihr Problem, mögliches Duplikat [Scanner wird das Überspringen nextline() übernächsten() verwendet, nextInt() oder andere nextFoo() Methoden] (http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo) –

+0

Erfahren Sie, wie Sie einen Debugger verwenden und debuggen Programm –

+0

Ich habe ein funktionierendes Beispiel zur Verfügung gestellt. Bitte stimmen Sie die Antwort ab und klicken Sie auf √, um zu akzeptieren, wenn Sie die Lösung finden, die das Problem gut für Sie löst. Vielen Dank – clearlight

Antwort

1

Sie haben die zusätzliche keyboard.nextLine(); an der falschen Stelle im Code.

son1 = keyboard.nextLine(); 
keyboard.nextLine(); // you don't need this here. 

son2 = keyboard.nextLine(); 
keyboard.nextLine(); // nor here 

Halten Sie die zusätzliche keyboard.nextLine(); Linie nach jedem keyboard.nextInt(); und Ihr Programm sollte gut laufen.

wifeAge = keyboard.nextInt(); 
keyboard.nextLine(); // put it here 
... 
son1Age = keyboard.nextInt(); 
keyboard.nextLine(); // and here 

Die nextInt() liest nur einen Wert ganze Zahl und nicht eine neue Zeile. Wenn Sie eine neue Zeile lesen müssen, müssen Sie die keyboard.nextLine(); jedes Mal setzen, wenn Sie ganzzahlige Werte von der Tastatur lesen.

Hoffe, das hilft!

0
import java.util.Scanner; 

public class Check2 
{ 
    public static void main(String[] args) 
    { 
String wife; 
String son1; 
String son2; 
int wifeAge; 
int son1Age; 
int son2Age; 

Scanner keyboard = new Scanner(System.in); 

System.out.println("Wife's name? "); 
wife = keyboard.nextLine(); 
System.out.println("Her age? "); 
wifeAge = keyboard.nextInt(); 
System.out.println(); 

System.out.println("First son's name? "); 
keyboard.nextLine(); 
son1 = keyboard.nextLine(); 
System.out.println("His age? "); 
son1Age = keyboard.nextInt(); 
System.out.println(); 

System.out.println("Second son's name? "); 
keyboard.nextLine();  
son2 = keyboard.nextLine(); 
System.out.println("His age? "); 
son2Age = keyboard.nextInt(); 
System.out.println(); 

keyboard.nextLine(); 

System.out.println("My wife's name is " + wife + ". She is " + 
        wifeAge + " years old.\nOur first son is " + 
        son1 + ". He is " + son1Age + ".\nOur " + 
        "second son is " + son2 + ". He is " + 
        son2Age + "."); 
    } 
} 
0

nextLine() ist nicht die Methode, die Sie wollen. Sie möchten stattdessen next() verwenden, wie im folgenden korrigierten und vereinfachten Code gezeigt. Sie möchten die Zeilenumbrüche nicht wirklich verwalten müssen. Lassen Sie den Scanner die gesamte Eingabe als Token-Zeichenfolge behandeln, die durch Leerzeichen getrennt sind, und lesen Sie sie nacheinander. Verwenden Sie die next() Verfahren zur Eingabe von Zeichenketten und nextInt() zur Eingabe von Zahlen ...

import java.util.Scanner; 

public class Check2 
{ 
    public static void main(String[] args) 
    { 
     String wife; 
     String son1; 
     String son2; 
     int wifeAge; 
     int son1Age; 
     int son2Age; 

     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Wife's name? "); 
     wife = keyboard.next(); 
     System.out.println("Her age? "); 
     wifeAge = keyboard.nextInt(); 
     System.out.println(); 

     System.out.println("First son's name? "); 
     son1 = keyboard.next(); 
     System.out.println("His age? "); 
     son1Age = keyboard.nextInt(); 
     System.out.println(); 

     System.out.println("Second son's name? "); 
     son2 = keyboard.next(); 
     System.out.println("His age? "); 
     son2Age = keyboard.nextInt(); 
     System.out.println(); 

     System.out.println("My wife's name is " + wife + ". She is " + 
        wifeAge + " years old.\nOur first son is " + 
        son1 + ". He is " + son1Age + ".\nOur " + 
        "second son is " + son2 + ". He is " + 
        son2Age + "."); 
     } 
    }