Ошибка выполнения при попытке чтения в массиве 2D int из пользовательского ввода - PullRequest
0 голосов
/ 08 мая 2020

Код, который я написал для сканирования в 2-мерном массиве, можно увидеть ниже, у меня есть проблемы во время выполнения, вот результат:

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

1 Ответ

1 голос
/ 08 мая 2020

Вы неправильно используете Scanner.

Scanner.nextInt () сканирует следующий токен ввода как int, а не как одиночные числа. Таким образом, каждая строка вашего ввода будет сканироваться как число. Строка 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++;
    }
}
...