当前位置: 首页 > 知识库问答 >
问题:

while循环[duplicate]第二次迭代中的Scanner NoTouchElementException

湛玄裳
2023-03-14
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();
    }
}

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

这是第一次,它工作得很好,但在第二次迭代中,我没有发现任何异常。

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

这是控制台输出。

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个答案

商和雅
2023-03-14

我相信这个错误意味着当没有下一个元素时,您正在尝试获取扫描仪的下一个()元素。您可以通过在下面的Next()中包装该节来解决这个问题:

if(sc.hasNext())

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

邓鸿信
2023-03-14

尝试把一个扫描仪对象的初始化放在time循环之外,关闭指令也是一样的,如下所示:

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

创建并关闭每个循环不是一个好主意。在您的情况下,您还试图从封闭系统中读取值。在哪种情况下会引起问题

 类似资料:
  • 问题 你在代码中使用 while 循环来迭代处理数据,因为它需要调用某个函数或者和一般迭代模式不同的测试条件。 能不能用迭代器来重写这个循环呢? 解决方案 一个常见的IO操作程序可能会想下面这样: CHUNKSIZE = 8192 def reader(s): while True: data = s.recv(CHUNKSIZE) if data ==

  • 问题内容: 我想每隔3个帖子通过XML回显图像,这是我的代码: 这是一个示例,前3个是正确的,但现在不会循环idgc.ca/web-design-samples-testing.php 问题答案: 最简单的方法是使用模数除法运算符。 工作原理:模数除法返回余数。当您为偶数倍时,余数始终等于0。 有一个陷阱:等于0。如果您的计数器从0开始,可能会导致意外结果。

  • 首先,感谢你阅读我的帖子并帮助我。 我试图编程,我定义了一个随机数,程序猜测这个随机数,然后,根据我说猜测太高或太低,程序再次猜测。 再次感谢!

  • 在Django模板中,我想创建一个遍历列表的for循环。在循环过程中,我还希望能够使用循环的迭代次数。 例如,如果有4个元素,那么: 应打印以下内容: 我该怎么做呢?

  • 问题内容: 考虑以下代码: 我有一些要求,例如我想读取/获取所有类型的键和值以进行某些处理,但我无法定义它,因为我将获得动态JSON输入(例如,作为字符串,那么第二级循环将给我索引)数组并处理每个具有key 和的JSON 。 我希望遍历其中包含的每个键/值对,浏览地图的最有效方法是什么? 注意:我是Go-lang的新手,也欢迎您提出问题。 问题答案: 请参阅此博客条目,该条目彻底涵盖了该主题,尤其

  • 我正在做一些产生正确结果的事情。然而,从设计观点来看,这是错误的。 该程序的重点是列出一个数字的所有幂的结果,直到并包括用户定义的限制。 我有一个构造函数,它接受扫描器中的基和指数。然后是一种利用for循环计算每个指数的幂的方法。 现在,问题是我直接从这个方法打印每个循环迭代的结果。这超过了私有变量的点,它首先是无效的。 因此,我想定义一个getter方法,它将每个幂的结果返回给输出。我过去常常为