为队列创建用户方法并遇到此错误

making user methods for queue and encounterd this error

提问人:Ocean Man 提问时间:1/11/2022 更新时间:1/11/2022 访问量:44

问:

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

有人可以帮我解决这个问题吗,这是我使用的代码

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)

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

Java 方法 链接列表 队列 java.util.scanner

评论


答:

0赞 Shahzad 1/11/2022 #1

这里的问题是您使用 .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