使用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();
}
}
}
}
答案 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
有用的链接: