2016-04-16 6 views
1

So habe ich ein Programm, liest Doppeleingaben von einem Benutzer eingegeben, aber wenn der Benutzer keine Daten am Anfang eingeben, möchte ich eine Nachricht als so drucken:Schleife zum Lesen Doppel von einem Benutzer eingegebene

Geben Sie Datensatz:

^D

Keine Daten!

Allerdings, wenn ich mein Programm ausführen und wenn der Benutzer Werte eingibt und dann drückt Ctl + d, obwohl es Werte eingegeben gibt das Programm immer noch die No Data Nachricht. Dies ist mein Code:

public static void main(String[] args) { 

    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Enter data set: "); 
    ArrayList<Double> nums = new ArrayList<Double>(); 

    while (keyboard.hasNextDouble()) { 
     nums.add(keyboard.nextDouble()); 
    } 
    //I think this is the part that is causing the bug but im not sure how to fix it 
    if (!keyboard.hasNextDouble()) { 
     System.out.println("\nNo Data!"); 
     return; 
    } 

Wie kann ich dieses Programm Mody, so dass nur dann, wenn der Eingang Benutzer doesnt alle Daten, die Nachricht gedruckt werden, anstatt die ganze Zeit, wenn der Benutzer die Datei endet? Vielen Dank. vielleicht

Antwort

3

Versuchen

if (nums.isEmpty()) { 

als Ihr Zustand?

+0

Vielen Dank! Das hat perfekt funktioniert @ Jan –

+0

Ich muss 5 Minuten warten, bevor ich auf das Häkchen klicken kann, um diese Antwort zu akzeptieren: P Aber ich werde sicherlich –

1

Sie überprüfen müssen, um Elemente in der Liste vorhanden sind, die Überprüfung der Methode List.isEmpty()

nach dem Java-doc:

boolean isEmpty() 

Gibt true zurück, wenn diese Liste keine Elemente enthält.

Beispiel:

if (nums.isEmpty()) { 
     System.out.println("\nNo Data!"); 
     return; 
    } 
1
public class Test { 

    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter data set: "); 
     ArrayList<Double> nums = new ArrayList<Double>(); 

    do { 
     try { 
      double temp = keyboard.nextDouble(); 
      nums.add(temp); 
     } catch (Exception e) { 
      //e.printStackTrace(); 
      break; 
     } 

    } while (true); 

    keyboard.close(); 

    if (nums.isEmpty()) { 
     System.out.println("\nNo Data!"); 
    } 
} 
} 

$ java Test 
Enter data set: 
1.2 
2.3 
$ java Test 
Enter data set: 
^D 
No Data! 
1

zu @ Antwort des Jan hinzuzufügen, was geschieht, wenn der Code dies ausführt:

while (keyboard.hasNextDouble()) { 
     nums.add(keyboard.nextDouble()); 
} 

es alle Token durchläuft (das sind doppelt) im Scanner, bis nichts mehr übrig ist. Danach, wenn die Ausführung kommt zu dem wenn Zustand:

if (!keyboard.hasNextDouble()) { 
    System.out.println("\nNo Data!"); 
    return; 
} 

Es hat keine mehr Doppel Token durchlaufen und somit nicht der Zustand und die Meldung angezeigt.

+0

Vielen Dank @blobmarley, das macht mehr Sinn jetzt! –

Verwandte Themen