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

Scanner :线程“main”java.util.NoSuchElment 异常

堵睿范
2023-03-14

我正在尝试创建一个实用程序类,以使用 java.util.扫描仪从标准控制台获取输入

package dbasics;

import java.util.*;


public class Utils {

    public static int getNumericInput() {
        System.out.println("Enter a integer ");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.close();
        return n;
    }

    public static int[] getNumericArrayInput(int n) {
        //System.out.println("Enter "+n+"  integers seperated by a whitespace ");
         int[] numbers = new int[n];
         Scanner scanner = new Scanner(System.in);
         for (int i = 0; i < n; i++) {
                 numbers[i] =scanner.nextInt();
             }

         scanner.close();
         return numbers;
    }

}

在另一个类中调用静态方法时,方法 getNumericInput() 工作正常,但是下面的方法获取数字数组输入(int n) 会导致异常。

package dbasics;

public class Demo {

    public static void main(String[] args) {

        int n = Utils.getNumericInput();
        System.out.println("Number "+n);
        int arr[] = Utils.getNumericArrayInput(n);
        for(int i : arr) {
            System.out.println(i);
        }
    }

}

运行此命令会导致以下异常

Enter a integer 
5
Number 5
Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at dbasics.Utils.getNumericArrayInput(Utils.java:21)
    at dbasics.Demo.main(Demo.java:9)

我注意到的有趣的事情是,如果我注释掉第一个输入过程,数组输入工作正常。

共有2个答案

拓拔高畅
2023-03-14

在第一种方法中,不要关闭扫描仪

云和同
2023-03-14

您正在关闭函数中的扫描仪,这导致了异常:请尝试:

import java.util.*;


class Utils {

    public static int getNumericInput() {
        System.out.println("Enter a integer ");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        return n;
    }

    public static int[] getNumericArrayInput(int n) {
         int[] numbers = new int[n];
         Scanner scanner = new Scanner(System.in);
         for (int i = 0; i < n; i++) {
                 numbers[i] =scanner.nextInt();
             }

         scanner.close();
         return numbers;
    }

}
public class cn {

    public static void main(String[] args) {

        int n = Utils.getNumericInput();
        System.out.println("Number "+n);
        try{
        int arr[] = Utils.getNumericArrayInput(n);

        for(int i : arr) {
            System.out.println(i);
        }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        }
    }

欲了解更多信息,请阅读此链接

 类似资料:
  • 当扫描仪无赖时间在(while循环)主打印异常:

  • 最近我正在学习Spring框架。所以我正在尝试检查依赖注入在Spring框架中的工作原理。因此,我创建了一个新的java项目并使用基于构造函数XML的配置练习依赖注入代码。运行我的项目后,我收到了这个错误...... 类路径资源[com/mir00r/beans.XML]的XML文档中的第24行无效;嵌套异常为组织。xml。萨克斯。SAXParseException;行号:24;列数:9;cvc复

  • 我正在学习selenium并尝试运行以下代码,但它引发了异常。NoSuchFieldError:空字节数组。请帮助我理解这个简单的程序出了什么问题。 控制台: 异常线程"main"java.lang.NoSuchFieldError:EMPTY_BYTE_ARRAY

  • 我正在看一张桌子。其中一列包含压缩(二进制)数据。我正在解压缩这些数据并存储在另一个RDD中。它给出了以下错误: 线程“main”组织中出现异常。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段2.0中的任务0失败1次,最近的失败:阶段2.0中的任务0.0丢失(TID 2,localhost,executor driver):java。util。同时发生的ExecutionEx

  • 我正在尝试在 Centos 7 上安装卡桑德拉 v3.0.2。我完全按照说明进行操作,我收到以下错误。只是为了重申我做了yum安装jna,版本是在4.0.0在/usr/share/java和卡桑德拉自由目录中 下面是Stacktrace

  • 问题内容: 每当我运行此命令时,该函数就可以正常使用。当我选择洞穴时,消息会每隔2秒弹出一次,然后当它越过该部分时,就会出现错误: 我已经尝试过和,并且在该方法中使用时,出现了很多错误。当我在方法中使用时,它不接受我的输入。 当我在该方法中使用时,它不接受我的字符串输入,而直接进入另一个游戏,但是布尔值返回并且它无限地发送垃圾邮件“ Which Cave …”。 我已经阅读了错误报告,以及类似问题