运行时错误-java.util.NoSuchElementException

时间:2019-04-01 18:27:27

标签: java arrays java.util.scanner

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

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();
                    }
                }     
    }
    }

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您应该使用阻塞的readLine调用而不是调用hasNextInt并将其强制转换为整数。

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

答案 2 :(得分:0)

请勿使用nextInt(),因为它不会清除缓冲区中的行。因此,一种更好的用户输入方法是使用s.nextLine()。接受整数输入

Integer.parseInt(s.nextLine())

当您使用nextInt()时,它将获取输入,但输入后的行仍在缓冲区中,并且当另一个nextInt()查找输入时,您将获得异常。

答案 3 :(得分:0)

您的代码有一些错误。

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

  • 您必须向用户说程序希望输入什么内容
  • 验证用户是否输入了正确的值
  • 解析输入的值
  • 使用该值

您没有执行某些步骤。因此,您的解决方案甚至无法执行。

这是一些适合所有步骤的代码段:

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

有用的链接: