尝试从用户输入读取2D int数组时发生运行时错误



我为在2d数组中扫描而编写的代码如下所示,im存在运行时问题,这是输出:

Runtime Error
Exception in thread "main" java.util.InputMismatchException: For input string: "00000000100000000000"
at java.util.Scanner.nextInt(Scanner.java:2123)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Main.main(Main.java:17)

代码:

import java.util.Scanner;
public class Main 
{
public static void main(String args[]) 
{
final int m = 20; // Rows
final int n = 20; // Columns
Scanner s1 = new Scanner(System.in);
int num = s1.nextInt();
int myArray1[][] = new int[m][n]; 
for (int i = 0; i < m; i++) 
{
for (int j = 0; j < n; j++) 
{
myArray1[i][j] = s1.nextInt();
}
}
for (int i = 0; i < m; i++) 
{
for (int j = 0; j < n; j++) 
{
System.out.print(myArray1[i][j] + "");
}
}
}
}

如果有人能帮我,我真的很感激!

这个输入是:

00000000000000000000
00000000000000000000
00000000010000000000
00000000010000000000
00000000000000000000
00000000000000000000

您没有以正确的方式使用扫描仪。

Scanner.nextInt((将输入的下一个标记扫描为int,而不是singel nums。所以你输入的每一行都会被扫描成一个数字。线00000000000000000000将被扫描为0,而线00000000010000000000是发生异常的地方,因为10000000000已经超过Integer的最大值,即2147483647

您可以按空格将输入行划分为记号。

更好的解决方案是将行读取为字符串,然后将字符串拆分为数字。在新行中输入exit以停止扫描。

int curRow = 0;
while (true) {
String line = s1.nextLine();
if ("exit".equals(line)) {
break;
} else {
// assume there are n numbers in range 0 - 9 for each line you input
char[] numArray = line.toCharArray();
for (int i = 0; i < n; i++) {
myArray1[curRow][i] = Integer.parseInt(String.valueOf(numArray[i]));
}
curRow++;
}
}

最新更新