-4

I am trying to make a triangular numbers generator that asks the user how many triangular numbers it would like them to generate. These are my errors:

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!");
            }
        }

    }

Everything works fine until it reaches the stage of the second user input.

mhasan
  • 3,511
  • 1
  • 16
  • 33
  • 3
    uhhhh sorry wrong dupe, don´t do `reps.close();` in the loop, you´re closing the `System.in` Stream and wont be able to input anymore afterwards. – SomeJavaGuy Oct 12 '16 at 05:47
  • Possible duplicate of [Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods](http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo) – xenteros Oct 12 '16 at 08:45

2 Answers2

-1

Why cant you try this way.?

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();
    }

}
Noushad
  • 369
  • 3
  • 10
-2

Pleae change code like this:

 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);
Jay Prakash
  • 650
  • 4
  • 21