为什么这段代码会出现Java的NoSuchElement异常?

3

我已经追踪了这段代码,但是无法弄清楚如何修复它。当运行代码时,为什么用户不会被提示输入,而是Java确定没有输入?以下是错误跟踪。

import java.util.*;
public class SortAsInserted {

    public static void main(String[] args) {
        int array_size = GetArraySize();
        //System.out.println(array_size);
        String[] myArray = new String[array_size];
        for (int i = 0; i < array_size; i++){
            String next_string = GetNextString();
            System.out.println(next_string);
        }
    }



    //public static String[] SortInsert(String nextString){
        //}

    public static int GetArraySize(){
        Scanner input = new Scanner(System.in);
        System.out.print("How many items are you entering?: ");
        int items_in_array = input.nextInt();
        input.close();
        return items_in_array;


    }

    public static void PrintArray(String[] x) {
        for (int i = 0; i < x.length; i++){
            System.out.print(x[i]);
        }

    }

    public static String GetNextString(){
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the next string: ");
        String next_string = input.nextLine();
        input.close();
        return next_string;

        }

这里有一个错误--
How many items are you entering?: 2
Enter the next string: 
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at SortAsInserted.GetNextString(SortAsInserted.java:40)
    at SortAsInserted.main(SortAsInserted.java:10)

请遵循 Java 命名规范,方法应采用 camelCase - Boris the Spider
当您想要继续从同一流中读取时,请不要关闭扫描器。 - laune
请参考:https://dev59.com/YWUp5IYBdhLWcg3w5KvV - Bobulous
3个回答

5

3

请从代码中删除 input.close();


那样做并不能太有帮助,因为原始问题提出者每次都在重新创建“Scanner”,而它需要被重复使用。 - Boris the Spider
1
注释掉 input.close() 可以解决问题。但最佳实践建议应该关闭 Scanner 实例。 - Bobulous
在主方法中创建Scanner,然后关闭它。 - Anjula Ranasinghe
如果我在主方法中创建了Scanner类,那么我是否可以在其他方法中省略它? - Efie

0
从两个函数中删除scanner.close()方法将解决您的问题。
import java.util.*;
public class SortAsInserted {

    public static void main(String[] args) {
        int array_size = GetArraySize();
        //System.out.println(array_size);
        String[] myArray = new String[array_size];
        for (int i = 0; i < array_size; i++){
            String next_string = GetNextString();
            System.out.println(next_string);
        }
    }



    //public static String[] SortInsert(String nextString){
        //}

    public static int GetArraySize(){
        Scanner input = new Scanner(System.in);
        System.out.print("How many items are you entering?: ");
        int items_in_array = input.nextInt();
        //input.close();
        return items_in_array;


    }

    public static void PrintArray(String[] x) {
        for (int i = 0; i < x.length; i++){
            System.out.print(x[i]);
        }

    }

    public static String GetNextString(){
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the next string: ");
        String next_string = input.nextLine();
       // input.close();
        return next_string;

        }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接