【问题标题】:Looping with scanner用扫描仪循环
【发布时间】:2016-10-12 05:43:09
【问题描述】:

我正在尝试制作一个三角数生成器,它会询问用户希望他们生成多少个三角数。 这些是我的错误:

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

    }

在进入第二个用户输入阶段之前一切正常。

【问题讨论】:

标签: java java.util.scanner


【解决方案1】:

你为什么不能这样试试?

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

}

【讨论】:

  • reps.close() 将无法访问
  • 正如 Amer 所说,我认为 reps.close() 永远不会发生,或者这无关紧要?
  • 这是您问题的解决方案。逻辑永远属于编码者。 :D
  • 说long和scanner不能一起走。
【解决方案2】:

请像这样更改代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-06
    • 2012-09-27
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多