2017-02-08 3 views
0

Dieser Code versucht, Schlüssel vom Benutzer zu akzeptieren und sie in einem Array von Zeichenfolgedaten zu speichern. Später im Programm wird der Wert für jede Taste in einem bestimmten Format angezeigt.Wie kann ich diese Schleife verlassen?

Erstens möchte ich diese Schleife zu beenden/beenden, wenn die Benutzereingabe leer/nextline ist. Ich möchte kein EOF-Zeichen oder eine Zeichenfolge verwenden, um die Schleife zu verlassen.

Ich habe einige Suche nach früheren SO Fragen/Lösungen, aber nicht in meinem Fall funktioniert. Brauchen Sie Hilfe, dieses Problem oder andere Alternativen zu lösen, sind sehr willkommen.

Vielen Dank im Voraus!

class DictionaryAndMap{ 
    public static void main(String[] args){ 
    Scanner sc = new Scanner(System.in); 
    int len = sc.nextInt(); 
    Map<String, Integer> mp = new HashMap<String, Integer>(); 
    String name; 
    int phone; 
    for(int i=0; i<len; i++){ 
     name = sc.next(); 
     phone = sc.nextInt(); 
     mp.put(name, phone); 
    } 
    int i=0; 
    String arr1[] = new String[10]; 
    String nam; 

// I couldn't exit out of this loop 
    while(sc.hasNext()){ 
     nam = sc.next(); 
     if(nam!=null && !nam.trim().isEmpty()){ 
     arr1[i] = nam; 
     i++; 
     } 
     else{ 
     break; 
     } 
    } 

// iterating through the array to find the search inputs 
    for(String j: arr1){ 
     if(mp.containsKey(arr1[j])){ 
     System.out.println(j+"="+mp.get(j));   
     }else{ 
     System.out.println("Not found"); 
     } 
    } 
    } 
} 

P.S. Der Wert hasNext() ändert sich nicht in false, auch wenn die Eingabe leer ist/null/"", daher endet die while-Schleife niemals. Wie kann ich sicherstellen, dass hasNext() eines dieser leeren Eingabedaten erkennt und daher aus der Schleife austreten kann?

+0

Die 'else if'-Anweisung ist redundant. Es wird immer "wahr" sein, wenn das erste "if" "falsch" ist. – 4castle

+0

http://StackOverflow.com/a/10490358/7187887 –

+0

Ich bin auf diesen Thread gestoßen, aber gibt es keine andere Lösung als die EOF-Anweisung? Gibt es eine Möglichkeit, dass ich zumindest \ n durch Benutzereingaben oder ähnliches verfolgen kann? – Akhil

Antwort

1

Überprüfen Sie einfach für die Eingabe leer ist, nachdem Sie es lesen:

while (scanner.hasNextLine()) { 
    nam = sc.nextLine(); 
    if (nam.trim().isEmpty()) 
     break; 
    ... 

Sie können dann den Rest vereinfachen, indem else if mit else nur ersetzt und die letzte else entfernen.

+0

Nein Sir. hasNext() erkennt keine leeren/null Benutzereingaben. Ich habe versucht, null, "", leer ... leider keiner von denen funktioniert :( – Akhil

+0

@Akhil: eigentlich nächste gut auf das nächste Token warten, so gut immer immer nicht leere Zeichenfolge zurück. Sie können auf hasNextLine() wechseln und nextLine(). Scanner aktualisiert. –

+0

Wenn ich hasNextLine() verwende, sucht das Steuerelement nach Eingabe in der gleichen Zeile (dh die vorherige Zeile, wo es die Benutzereingabe des Schlüssel/Wert-Paares benötigt) ... also, wenn I Wenn Sie danach die Eingabetaste drücken, wird das Steuerelement aus der Schleife entfernt. – Akhil

1

haben Sie die Zeichenfolge überprüfen, ob leer oder Null-Lücke so außer Kontrolle gerät die while-Schleife kommt

nam=sc.next(); 
if(name==null || name.isEmpty()){ 
break; //break the loop 
} 
+0

Nein Sir. hasNext() isn ' Ich habe versucht, null, "", leer ... leider keiner von diesen funktioniert :( – Akhil

0

dieser Code können Ihnen helfen. Sie keine Notwendigkeit ! Mp.containsKey (nm) zu überprüfen

while(sc.hasNext()){ 
nam = sc.next(); 

if(mp.containsKey(nam)){ 
    arr1[i] = nam; 
    i++; 
} 
else { 
    System.out.println("Not found"); 
} 
+0

Keine Möglichkeit, das funktioniert. Ich habe verwendet! mp.containsKey (nam) nur, weil ich die unterscheiden konnte empty/null Eingabe – Akhil

+0

if (mp.containsKey (nam) &&! na m.trim().isEmpty()) füge dieses in deinem Zustand hinzu –

+0

nah ich habe alle diese ... funktioniert überhaupt nicht – Akhil

1

Ich denke, dies ist der Code Sie suchen

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    String nam; 
    Map<String, Objects> mp = new HashMap<>(); 
    String[] arr1 = new String[1024]; 
    int i = 0; 
    nam = sc.nextLine(); 

    while (nam.length() > 0) { 

     if (mp.containsKey(nam)) { 
      arr1[i] = nam; 
      i++; 
     } else { 
      System.out.println("Not found"); 
     } 
     nam = sc.nextLine(); 
    } 
} 

Schleife wird durch Anschlagen geben mit leeren String beendet werden.