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

正在为队列创建用户方法,但遇到此错误

吴缪文
2023-03-14

由于某种原因,我在创建方法时遇到了这个错误。在此处输入图像描述

有人能帮我这个吗?这是我用的代码

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
    
        Queue<Integer> q= new LinkedList<Integer>();
        NQ(q);
        displayQ(q);
        DQ(q);
        displayQ(q);}

    public static void NQ(Queue<Integer> q){
        Scanner scan = new Scanner(System.in);
        System.out.print("Number of digits to be added: ");
        int digits= scan.nextInt();
        System.out.println("Enter numbers to be Added:");
        for (int i = 0; i < digits; i++) {
            q.add(scan.nextInt());
        }
        scan.close();
    }
    public static void DQ(Queue<Integer> q){
        Scanner scan = new Scanner(System.in);
        System.out.print("Number of digits to be remove: ");
        int digits= scan.nextInt();
        for (int i = 0; i < digits; i++) {
            q.remove();
        }
        scan.close();
    }
    public static void displayQ(Queue<Integer> q) {
        System.out.println(q);
    }}

这是代码的输出

Number of digits to be added: 5    
Enter numbers to be Added:  1  2  3 4  5  
[1, 2, 3, 4, 5] 
Number of digits to be remove: Exception in thread "main" java.util.NoSuchElementException
            at java.base/java.util.Scanner.throwFor(Scanner.java:937)
            at java.base/java.util.Scanner.next(Scanner.java:1594)
            at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
            at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
            at Test.DQ(Test.java:31)
            at Test.main(Test.java:12)

我该怎么办?!?!?!?

共有1个答案

云建木
2023-03-14

这里的问题是您使用java.util.Scanner的方式。

一旦您关闭扫描仪,它也会关闭您传递给它的输入流(在这种情况下为System.in)。你可以在文档中读到更多关于这个的内容。

解决这个问题的一种方法是创建一个Scanner实例,并在需要的地方使用它。在您的特定情况下,您可以执行以下操作:

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

    Queue<Integer> q= new LinkedList<Integer>();
    NQ(q, scanner);
    displayQ(q);
    DQ(q, scanner);
    displayQ(q);

    scanner.close();
}

您需要更新NQDQ以接受扫描仪(而不是创建新实例),并且也不要用这些方法关闭扫描仪。

 类似资料:
  • 我收到了一个关于这个问题的建议,一个评论,说我可能没有我需要的交换,因为我的队列已经存在。于是,我就全部手动删除了。 但是,在重新部署应用程序时,我发现所有队列都有以下异常: 我不确定这意味着什么,因为我显然想要创建队列<code>myInput。组,它似乎在抱怨它不存在。。。 我也检查了这个问题,我的问题可能是权限。但我应该有它们——否则我相信我无法删除队列...... 你能给我一个解决方案吗?

  • 警告conda . exceptions:print _ unexpected _ error _ report(1216):key error(' pkgs _ dirs ')trace back(最近一次调用last):File " C:\ program data \ anaconda 3 \ lib \ site-packages \ conda \ exceptions . py ",第

  • 我们目前正在使用nservicebus从azure servicebus队列读取消息。 我可以通过代码创建所需的队列,但有人知道我是否可以设置配置文件,在azure上自动创建错误和输入队列吗?

  • 该消息已从队列中删除,但在我的应用程序日志中,我得到一个错误······ 如果我正确理解stacktrace,那么oracle.jms api缺少一个标头JMSXGroupSeq,这并不是不可能的,因为对方没有使用oracle jms api创建消息。他和我都无法查看实际的队列(它在我们共同的客户端),所以我无法检查真正到位的头。 使用自定义headerFilterStrategy没有任何帮助,因

  • 这里是错误 执行任务失败:应用程序:check DebugDuplicateClass。 执行com时发生故障。Android建筑格雷德尔。内部的任务。选中DuplicatesRunnable Duplicate class android。支持v4。应用程序。INotificationSideChannel位于模块core-1.5.0-runtime(androidx.core:core:1.5

  • 我正在准备开发连接到Azure服务总线的应用程序。对于开发,我想使用服务总线1.1。 我已经安装了localyservicebus 1.1,当我连接包服务总线时,它可以正常工作。v1_1版本。1.0.5. 但由于我希望最终使用Azure,我更喜欢使用WindowsAzure服务总线包,据我所知,它与服务总线1.1兼容。 但是当我想执行: 与WindowsAzure。ServiceBus ver 3