2016-03-28 10 views
-2

ich will sie dann in einer Sammlung Karte Code innerhalb eines for-Schleife zwei Variablen mit Scanner-Klasse zu lesen ist unten sparen:wie kann ich zwei Eingänge in Schleife Java lesen

public class Example{ 

public static void main(String args[]){ 

    Map<String,Integer> mapSub = new HashMap<String,Integer>(); 
     for (int i=0;i<nbSubnet;i++){ 
     System.out.println("Enter name of the subnet "+i+" : "); 
     String nameSubnet = scanner.nextLine(); 
     System.out.println("Enter the size of the subnet "+i+" : "); 
     int sizeSubnet = scanner.nextInt(); 

     mapSub.put(nameSubnet, sizeSubnet); 
    } 
    } 
} 

aber ich bekomme diese Ausnahme nach dem Laufen der Code:

Enter name of the subnet 0 : 
Enter the size of the subnet 0 : 
IT 
Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at view.Main.main(Main.java:60) 

jede Hilfe großer dank

+4

nicht speichern kann, 'Es' ist kein 'int' – Hackerdarshi

+0

i die Zeichenfolge geben„IT“als Name, was ich aus dem Code erwarten die Zeichenfolge zu tun, fragen zuerst und dann fragen Sie nach der Ganzzahl, die die Größe – azdoud

+0

Ich denke, dass dies http://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint-or-for-nextfoo-methods – RubioRic

Antwort

0

Sie benötigen eine Eingabe sicherstellen würde zu bestätigen, dass Sie den Typ, den Sie erwarten zu bekommen. IT ist kein int, also wird int sizeSubnet = scanner.nextInt(); natürlich fehlschlagen.

Zumindest ein Versuch/Fang wäre eine gute Idee.

int sizeSubnet; 
try{ 
    sizeSubnet = scanner.nextInt(); 
} catch() { 
    sizeSubnet = 0; 
} 

Wenn Sie erwarten, dass ITnameSubnet sein sollte, dann werden Sie zu make sure the scanner waits for the input mit einem zusätzlichen scanner.nextLine(); benötigen.

+0

Jungs Ich möchte den Namen zuerst Subnet von String nameSubnet zuweisen = scanner.nextLine(); deshalb gab ich ihm die Zeichenfolge "IT" – azdoud

+0

@azdoudyoussef, dann sollten Sie die Plätze der Eingänge tauschen. –

+0

@azdoudyoussef Deshalb habe ich die Antwort aktualisiert-- lesen Sie den Link, um zu verstehen, warum Sie die zusätzliche Zeile hinzufügen müssen. Was passiert, ist, dass Sie nicht auf die Eingabe des Benutzers warten, so dass das erste, was Sie eingeben, nicht als Name gelesen wird, sondern als Größe gelesen wird. – senschen

0

Der Grund Ausnahme hierbei ist, dass scanner.nextInt(); eine int zurückgibt, und zur Laufzeit Sie vorbei IT, welche Art von java.lang.String ist. und eine Variable vom Typ int eine AFAIK String

+0

Steigt diese Ausnahme wenn du die Eingabe zum zweiten Mal anheftest? –

+0

Natürlich ist es hier offensichtlich. –

+0

Dieses Problem tritt oft auf, wenn Sie versuchen, String-Eingaben von der Konsole zu übernehmen. Denn das String-Beendigungssymbol '\ n' bleibt im Puffer. Wenn der Controller das zweite Mal kommt, denken Sie, dass '\ n' die angegebene Eingabe ist nach Benutzer und es dauert '\ n' als Eingabe, und warten Sie nicht auf Benutzereingaben. Versuchen Sie, den Puffer zu leeren, bevor Sie die zweite Eingabe vornehmen, und Sie werden dieses Problem nicht erneut haben. –

Verwandte Themen