【问题标题】:NoSuchElementException in nextInt() no matter what I do to the code无论我对代码做什么,nextInt() 中的 NoSuchElementException
【发布时间】:2020-08-09 09:59:25
【问题描述】:
public class MinimumElement {

public void readIntegers(int userCount) {
    int count = userCount;
    int intArray[] = new int[count];
    Scanner scan = new Scanner(System.in);

    for (int i = 0; i <= count - 1; i++) {
        int number;
        System.out.println("Please input number ");
        number = scan.nextInt();
        intArray[i] = number;
    }
    scan.close();
}

public static void main(String[] Args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter the number of elements required for array");
    int userInput = scan.nextInt();
    scan.nextLine();
    scan.close();
    MinimumElement min = new MinimumElement();
    min.readIntegers(userInput);

}

}

也尝试了hasNextInthasNextLineif 条件。他们总是将结果值返回为false

【问题讨论】:

  • 你的意见是什么?
  • 代码输出:=================>>请输入数组3所需的元素数>>请输入数字>>异常在线程“主” java.util.NoSuchElementException >>at java.util.Scanner.throwFor(Scanner.java:862) >>at java.util.Scanner.next(Scanner.java:1485) >>at java.util .Scanner.nextInt(Scanner.java:2117) >>at java.util.Scanner.nextInt(Scanner.java:2076) >>at MinimumElement.readIntegers(MinimumElement.java:14) >>at MinimumElement.main(MinimumElement. java:270)
  • 无法复制

标签: java java.util.scanner nosuchelementexception


【解决方案1】:

好的,我相信我可能已经找到了解决您问题的方法。问题在于您尝试读取 System.in 的方式:您实际上分配了两个 Scanner 实例!

int intArray[] = new int[count];
Scanner scan = new Scanner(System.in);

在那边:

Scanner scan = new Scanner(System.in);
System.out.println("Please enter the number of elements required for array");

这会导致奇怪的问题。因此,请改为创建 Scanner 的全局实例,如下例所示。

public class MinimumElement {

    private static final Scanner SCANNER = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("Please enter the number of elements required for array");
        try {
            int userInput = SCANNER.nextInt();
            SCANNER.nextLine();
            MinimumElement min = new MinimumElement();
            min.readIntegers(userInput);
        } finally {
            SCANNER.close();
        }
    }

    public void readIntegers(int userCount) {
        int[] intArray = new int[userCount];
        for (int i = 0; i <= userCount - 1; i++) {
            int number;
            System.out.println("Please input number ");
            number = SCANNER.nextInt();
            intArray[i] = number;
        }
    }
}

请注意,在调用close() 之后,您必须注意不要与Scanner 交互,因为这也会导致错误行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2016-10-30
    • 2018-01-24
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多