while循环

时间:2018-04-07 13:09:24

标签: java java.util.scanner nosuchelementexception

public static void main(String[] args) {
    while(true)
    {
        System.out.println("Want to repeat :");
        Scanner sc = new Scanner(System.in);
        if(!sc.next().equalsIgnoreCase("y"))
            break;
        //Prime number
        //isPrimeNumber();

        //Fibonacci series
        //fibonacciSeries();

        //factorial using recursion
        getFactorialOfaNumber();

        sc.close();
    }
}

我正在使用这个程序,每次我从控制台检查输入时,根据提供的输入,我决定是继续还是终止程序。

它第一次工作正常,但在第二次迭代中我得到了 NoSuchElementException异常。

为什么在没有请求输入参数的情况下抛出异常。

这是控制台输出。

y
FACTORIAL
Enter a number:
6
Factorial is :720
Want to repeat :
Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at com.chandu.main.PrimeNumbers.main(PrimeNumbers.java:12)

2 个答案:

答案 0 :(得分:1)

尝试将scanner对象的初始化放在while循环之外,对于结束指令也是如此:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    while(true)
    {
        System.out.println("Want to repeat :");
        if(!sc.next().equalsIgnoreCase("y"))
            break;
        //Prime number
        //isPrimeNumber();

        //Fibonacci series
        //fibonacciSeries();

        //factorial using recursion
        getFactorialOfaNumber();
    }
    sc.close();
}

每个循环创建和关闭扫描程序并不是一个好主意。在你的情况下,你也试图从封闭的System.in中读取值,这会导致问题

答案 1 :(得分:0)

我相信这个错误意味着当没有下一个元素时,你正试图获取扫描器的next()元素。您可以通过将next()部分包含在以下内容中来解决此问题:

if(sc.hasNext())

另一方面,如果发生中断,sc永远不会关闭,这是不好的做法。我建议在循环外声明扫描仪,然后在循环后关闭它。