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

关闭扫描器时出现java.util.NoSuChelementException错误

陈兴朝
2023-03-14
public class a2 {

    public static int read() {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        sc.close();
        return num;
    }

    public static void out (int a, int b) {
        System.out.println("Sum: " + (a+b));
        System.out.println("Difference: " + (a-b));
        System.out.println("Product: " + (a*b));
        System.out.println("Quotient: " + ((double)a/(double)b));
        System.out.println("Remainder: " + (a%b));
    }

    public static void main(String[] args) {
        System.out.println("Please enter two integers!:");
        int a = read();
        int b = read();     
        out(a,b);
    } 
} 

我对我的代码有一点理解上的问题。每次运行代码时,在输入第一个整数后都会收到此错误消息。

在java.util.scanner.throwfor(未知源)在java.util.scanner.next(未知源)在java.util.scanner.nextint(未知源)在java.util.scanner.nextint(未知源)在java.util.scanner.nextint(未知源)在a2.read(A2.java:6)在a2.main(A2.java:22)

我发现,当我删除“sc.close();”行,或者当我将两个变量中的一个定义为常数时,它工作得非常好。有人能给我解释一下吗?

共有1个答案

韩弘壮
2023-03-14

你不能这样做:

int a = read();
int b = read();     

因为read方法正在关闭扫描器,并在幕后关闭来自系统的输入流······

全局声明扫描器对象并读取所需的内容,最后关闭它

private static Scanner sc;

public static int read() {

    return sc.nextInt();
}

public static void out(final int a, final int b) {
    System.out.println("Sum: " + (a + b));
    System.out.println("Difference: " + (a - b));
    System.out.println("Product: " + a * b);
    System.out.println("Quotient: " + (double) a / (double) b);
    System.out.println("Remainder: " + a % b);
}

public static void main(final String[] args) {
    System.out.println("Please enter two integers!:");
    sc = new Scanner(System.in);
    int a = read();
    int b = read();
    sc.close();
    out(a, b);
}
 类似资料:
  • 问题内容: 我正在用Java从头开始编写RPG战斗系统,雄心勃勃吧?好吧,我遇到了麻烦。这是我的代码: 当它到达代码中的这一点时,我得到: 你会怎么做?说(战斗)(运行)(使用项) 线程“主”中的异常java.util.NoSuchElementException: 在Combat.turnChoice(Combat.java:23)的 java.util.Scanner.nextLine(Unk

  • 因此,在调用一个我将在下面发布的函数(在main中)后,在同一个main中创建一个新的扫描器对象不起作用,并给了我以下错误: 它就放在我调用函数之后(在上面的代码中,我会关闭扫描器)。当我注释掉调用函数时,这个扫描器工作了,所以函数中的一些东西导致了扫描器中的错误。我花了几个小时寻找,但无法解决它,如果有人可以,我会非常感激。函数: (当我测试它时,我总是输入2)我尝试删除do-while循环,但

  • 我刚开始我的大学java课程,在扫描器类中不断得到这个错误。 我不断得到的错误是:

  • 我是这样编译它们的: 确切的错误是这样的:

  • 问题内容: 我试图将我的应用程序中较大且经常使用的部分重构为单独的方法,以使其易于维护。 其中一些方法要求用户输入并进行输入验证,因此我使用了Scanner和System.in,但是当我关闭Scanner时,我也关闭了System.in。 所以我的问题是,我只能通过用CloseShieldInputStream屏蔽System.in来防止System.in关闭,还是应该开始将Scanner传递给方

  • 我试图将应用程序中大量且经常使用的部分重新划分为不同的方法,以使其更容易维护。 其中一些方法要求用户输入并进行输入验证,因此我使用了扫描仪和系统。但当我关闭扫描仪时,我也会关闭系统。在里面 所以我的问题是,我只能阻止系统。通过使用CloseShieldInputStream屏蔽它来关闭,还是我应该开始向方法传递一个扫描器?