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)
答案 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
永远不会关闭,这是不好的做法。我建议在循环外声明扫描仪,然后在循环后关闭它。