运行时错误- java.util.NoSuchElementException.



程序使用类输入2D数组Scanner但输出显示:

Runtime error:
 NZEC
Exception in thread "main" 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 Wocode.main(Main.java:9)

代码片段:

import java.lang.*;
    import java.util.*;
    import java.util.Scanner;
     class Wocode {
        public static void main(String args[]) {
            Scanner s=new Scanner(System.in);
                int m=s.nextInt();
                int n=s.nextInt();
                int A[][] = new int[m][n];
                for(int i=0;i<m;i++)
                {
                  for(int j=0;j<n;j++)
                    {
                     A[i][j]=s.nextInt();
                    }
                }     
    }
    }

不要使用 nextInt(),因为它不会清理缓冲区中的行。因此,用户输入的更好方法是使用 s.nextLine() .要采用整数输入,请执行

Integer.parseInt(s.nextLine())

当您使用 nextInt() 时,它会接受输入,但输入后的行仍然存在于缓冲区中,当另一个nextInt()查找输入时,您会得到异常。

我同意cricket_007。在调用 s.next(( 之前需要检查 hasNext(( 方法,如下所示。<if(s.hasNextInt()){ A[i][j]= s.nextInt(); }>

与其调用 hasNextInt,不如使用阻塞 readLine 调用并转换为整数。

int n = Integer.parseInt(s.nextLine());

你的代码有一些错误。

这是一个序列,如何解决它们:

  • 你必须告诉用户程序到底期望什么作为输入
  • 验证用户输入的值是否正确
  • 解析输入的值
  • 使用该值

你没有做一些步骤。因此,您的解决方案甚至不会执行。

以下是一些适合所有步骤的代码片段:

class Wocode {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Please enter two numbers (separated by space): ");
        if (scanner.hasNext()) {
            String[] input = scanner.nextLine().split(" ");
            if (input.length == 2) {
                int firstNumber = Integer.valueOf(input[0]);
                int secondNumber = Integer.valueOf(input[1]);
                int arr[][] = new int[firstNumber][secondNumber];
                for (int rows = 0; rows < firstNumber; rows++) {
                    for (int columns = 0; columns < secondNumber; columns++) {
                        arr[rows][columns] = firstNumber + secondNumber;
                        System.out.print(String.format("%4s", arr[rows][columns]));
                    }
                    System.out.println();
                }
            } else {
                System.err.println("You have to enter two digits, separated by space!");
            }
        }
    }
}

输出:

Please enter two numbers (separated by space): 3 5
   8   8   8   8   8
   8   8   8   8   8
   8   8   8   8   8

有用的链接:

  • 如何使用扫描仪读取字符串
  • 如何使用 Java 中的 Scanner 类从控制台读取输入?

最新更新