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

为什么这段代码会出现Java NoTouchElement异常?,java,java.util.scanner,nosuchelementexception,Java,Java.util.scanner,Nosuchelementexception,我已经跟踪了这段代码,不知道如何修复它。运行代码时,为什么不提示用户输入,而不是Java确定没有输入?下面是错误跟踪 import java.util.*; public class SortAsInserted { public static void main(String[] args) { int array_size = GetArraySize(); //System.out.println(array_size); Stri

我已经跟踪了这段代码,不知道如何修复它。运行代码时,为什么不提示用户输入,而不是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;

        }
删除
input.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;

        }
 }
import java.util.*;
公共类排序插入{
公共静态void main(字符串[]args){
int array_size=GetArraySize();
//System.out.println(数组大小);
字符串[]myArray=新字符串[数组大小];
for(int i=0;i
简单的答案是当您关闭扫描仪时——底层输入流也会关闭:

要修复此问题,请在main中创建一次扫描仪:

 public class SortAsInserted {
     static Scanner input;
     public static void main(String[] _) {
         input = new Scanner(System.in); 
         ....
         input.close();  
     }

请遵守Java命名约定,方法应在
camelCase
中。如果要继续从同一个流中读取,请不要关闭扫描仪。另请参阅,这不会有太大帮助,因为OP每次都在重新创建
扫描仪
,并且需要重复使用。注释掉
input.close()
可以解决问题。但是最佳实践建议应该关闭
Scanner
实例。是的,在main方法中创建Scanner并将其关闭。如果在main方法中创建Scanner类,是否从其他方法中忽略它?
 public class SortAsInserted {
     static Scanner input;
     public static void main(String[] _) {
         input = new Scanner(System.in); 
         ....
         input.close();  
     }