2016-10-12 2 views
-3

Ich versuche einen Dreieckszahlengenerator zu erstellen, der den Benutzer fragt, wie viele Dreieckszahlen er erzeugen soll. Das sind meine Fehler:Looping mit Scanner

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:862) 
    at java.util.Scanner.next(Scanner.java:1485) 
    at java.util.Scanner.nextInt(Scanner.java:2117) 
    at java.util.Scanner.nextInt(Scanner.java:2076) 
    at TriangularNumbers.main(TriangularNumbers.java:11) 


    import java.util.Scanner; 

    public class TriangularNumbers { 
     public static void main(String args[]) { 
      while(true){ 
       long tnumber = 1L; 
       long amount = 2L; 
       System.out.println("Welcome to the triangular numbers   calculator!"); 
       System.out.println("Type in the amount of triangular numbers to be generated!"); 
       Scanner reps = new Scanner(System.in); 
       long repeats = reps.nextInt(); 
       reps.close(); 
       long i = 0L; 
       while (i < repeats) { 
        i = i + 1; 
        System.out.println(i + ". " + tnumber); 
        tnumber = tnumber + amount; 
        amount = (amount + 1); 
       } 
       System.out.println("Done generating!"); 
      } 
     } 

    } 

Alles funktioniert gut, bis er die Stufe der zweiten Benutzereingabe erreicht.

+3

uhhhh leider falsch Betrogene, TUN NICHT tun 'reps.close();' in der Schleife, die 'System.in' Passendes Schließen Stream und kann danach nicht mehr eingegeben werden. – SomeJavaGuy

+0

Mögliches Duplikat von [Der Scanner überspringt nextLine() nach der Verwendung von next(), nextInt() oder anderen nextFoo() Methoden] (http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after- using-next-nextint-or-other-nextfoo) – xenteros

Antwort

-1

Warum können Sie diesen Weg nicht versuchen?

import java.util.Scanner; 

public class TriangularNumbers { 
    public static void main(String args[]) { 
     Scanner reps = new Scanner(System.in); 
     while(true){ 
      long tnumber = 1L; 
      long amount = 2L; 
      System.out.println("Welcome to the triangular numbers   calculator!"); 
      System.out.println("Type in the amount of triangular numbers to be generated!"); 

      long repeats = reps.nextInt(); 
      if(reps == 0L) break; //Considering reps ==0 as the terminating condition to get out of the loop 
      long i = 0L; 
      while (i < repeats) { 
       i = i + 1; 
       System.out.println(i + ". " + tnumber); 
       tnumber = tnumber + amount; 
       amount = (amount + 1); 
      } 
      System.out.println("Done generating!"); 
      reps.nextLine(); // Has to be there in case of run out of tokens 
     } 
     reps.close(); 
    } 

} 
+0

reps.close() wird unerreichbar sein –

+0

Wie Amer sagte, ich glaube nicht, dass reps.close() jemals auftreten würde, oder spielt das keine Rolle? –

+0

Es war eine Lösung für Ihr Problem. Logik gehört immer zum Coder. : D – Noushad

-2

Pleae Änderung Code wie folgt:

long tnumber = 1L; 
    long amount = 2L; 
    System.out.println("Welcome to the triangular numbers   calculator!"); 
    System.out.println("Type in the amount of triangular numbers to be generated!"); 
    Scanner reps = new Scanner(System.in); 
    long repeats = reps.nextInt(); 
    reps.close(); 
    long i = 0L; 
    do { 
     i = i + 1; 
     System.out.println(i + ". " + tnumber); 
     tnumber = tnumber + amount; 
     amount = (amount + 1); 
     System.out.println("Done generating!"); 
    } while (i < repeats);