2016-04-07 8 views
0

Der Code funktioniert nicht wie gewünscht. Die Konsole fragt nach Werten und hört nie auf.ArrayList-Programm funktioniert nicht wie gewünscht

package com.java.collections; 

import java.util.*; 

public class ArrayList_2 { 

    public static void main(String[] args) { 

     ArrayList<String> arrayList = new ArrayList<String>(); 
     readList(arrayList); 
     displayList(arrayList); 
    } 

    private static void displayList(ArrayList<String> arrayList) { 

     for(int i=0;i<arrayList.size();i++){ 
      System.out.println(arrayList.get(i)); 
     } 

    } 

    private static ArrayList<String> readList(ArrayList<String> list) { 

     @SuppressWarnings("resource") 

     Scanner obj = new Scanner(System.in); 

     while(obj.hasNext()){ 
      String item = obj.next(); 
      list.add(item); 
     } 
     return list; 
    } 

} 

Antwort

0

würde ich Ihre while Schleife in Ihrem readList Verfahren, wie dies ändern up:

Scanner obj = new Scanner(System.in); 

String item = ""; 

//*priming read* 
item = obj.nextLine(); 

while(!item.equals("-0")) 
{ 
    list.add(item); 

    //*update read* 
    item = obj.nextLine(); 
} //end while 

diese Weise wird die Schleife für einen Sentinel-Wert wird überprüft, die in item enthalten sein würden.

+0

wird sicher versuchen. Aber ich verstehe nicht, warum mein Code nicht funktioniert. –

+0

Lassen Sie mich das besser erklären, 'hasNext' gibt true zurück, wenn der Scanner,' obj' in Ihrem Fall, ein anderes Token in seiner Eingabe hat. Wenn Sie also nur eine leere Zeichenfolge eingeben, wird das Ergebnis wahr. Ihre Schleife hat keinen Sentinel-Wert, um die Schleife zu stoppen. In meinem Code habe ich einen "-0" angegeben. – Logan

+0

Konnte es nicht zur Arbeit bringen. Ich habe verstanden, was du gesagt hast. Danke vielmals! Gibt es eine andere Möglichkeit, das richtig zu kodieren? Bitte helfen Sie. –

0

Ihr Code funktioniert nicht, weil er in der while-Schleife festsitzt. Sie haben keine Unterbrechungsbedingung darin. Versuchen Sie es mit diesem zu ersetzen:

while (obj.hasNext()) { 
     String item = obj.next(); 
     if (item.equals("stop")) { 
      break; 
     } 
     // otherwise do stuff here... 
    } 
    obj.close(); 

Wenn Sie "Stop" eingeben, wird die Schleife beendet. Vergessen Sie nicht, Ihre Scanner-Instanz zu schließen.

+0

Danke, ich habe jetzt die Idee! –

+0

gibt die hasNext() Methode true zurück, wenn ich nichts eingebe und auf Enter klicke? –

+0

Warum testest du es nicht einfach? Fügen Sie einfach Folgendes in Ihre Schleife ein, z. B .: System.out.println ("hasNext() war true."); – Exlll

0

Ihr Programm hört nicht auf und fragt nach mehr Werten, weil es keinen Code gibt, der das Programm zum Stoppen bringt :).

Sie können eine Bedingung hinzufügen, die besagt, dass der Code keine Eingaben mehr akzeptiert, z. wenn der Benutzer 5 Wörter wie folgt eingegeben hat (siehe die kommentierten Zeilen):

private static void readList(ArrayList<String> list) { 

    @SuppressWarnings("resource") 
    int start = 1; // start count 
    int end = 5; // end count 
    Scanner obj = new Scanner(System.in); 

    while(obj.hasNext() && start<=end){ // <- Note the condition! 
     String item = obj.next(); 
     list.add(item); 
     start++; // Keep a count. 
    } 

} 
+0

Danke, ich habe jetzt die Idee! –

+0

gibt die hasNext() -Methode true zurück, wenn ich nichts eingebe und auf Enter klicke? –

+0

Ich glaube, dass es wahr zurückgibt, da Sie immer noch eine leere Eingabe eingeben. Sie können Ihren Code debuggen und die Dokumentation überprüfen, um dies zu überprüfen. – rgamber

Verwandte Themen