Java: Построение двумерного матричного массива в соответствии с вводом пользователя с помощью сканера - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь прочитать элементы двухмерной матрицы 3x3 с помощью сканера. Входные данные будут выглядеть примерно так:

3
11 2 4
4 5 6
10 8 -12

Я сейчас получаю сообщение об ошибке:

Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
scan.next();

List<List<Integer>> array = new ArrayList<>();

for (int i = 0; i < a; i++) {
 
    String number = scan.nextLine();
    String[] arrRowItems1 = number.split(" ");
    List<Integer> list = new ArrayList<>(); 

    for (int j = 0; j < a; j++) {
        int arrItem = Integer.parseInt(arrRowItems1[j]); 
        list.add(arrItem);
    }

    array.add(list);
}

scan.close();

Как мне go решить эту проблему, чтобы в конце Матричный массив 2d 3x3 построен в соответствии с вводом пользователя? Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 августа 2020

Сделайте следующее:

Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
scan.nextLine(); // change to nextLine

Ваша программа отлично работает в том виде, в котором она была написана, если вы внесете указанные выше изменения. Тем не менее, я рекомендую вам разделить на "\\s+", чтобы разрешить любое количество пробелов между числами.

0 голосов
/ 05 августа 2020

Вы можете прочитать ввод построчно как строку, проверить его на достоверность, проанализировать и заполнить int[][] -матрицу. Таким образом, программа продолжает запрашивать ввод до тех пор, пока не получит три допустимые строки чисел:

Scanner scan = new Scanner(System.in);
int dim = 3; //dimensions of the matrix
int line = 1; //we start with line 1
int[][] matrix = new int[dim][dim]; //the target matrix

while(line <= dim) {
    System.out.print("Enter values for line " + line + ": "); //ask for line
    String in = scan.nextLine(); //prompt for line
    String[] nums; //declare line numbers array variable
    
    //check input for validity
    if (!in.matches("[\\-\\d\\s]+")
            | (nums = in.trim().split("\\s")).length != dim) {
        System.out.println("Invalid input!");
        continue;
    }
    
    //fill line data into target matrix
    for (int i = 0; i < nums.length; i++) {
        matrix[line - 1][i] = Integer.parseInt(nums[i]);
    }
    
    line++; //next line
}

scan.close(); //close scanner (!)

//test output
for (int i = 0; i < matrix.length; i++) {
    System.out.println(Arrays.toString(matrix[i]));
}

Последняя for -l oop предназначена только для печати результата, просто чтобы проверить, работает ли он :

Enter values for line 1: 11 2 4
Enter values for line 2: 4 5 6
Enter values for line 3: 10 8 -12
[11, 2, 4]
[4, 5, 6]
[10, 8, -12]

Кстати, изменив значение dim (размер), вы даже можете получить матрицу 5x5 или любую другую! Надеюсь, это помогло!

...