Попытка заполнить 2D-массив введенными пользователем значениями. Работает только иногда. (Java) - PullRequest
0 голосов
/ 29 марта 2020

В настоящее время я работаю над программой на java, чтобы заполнить 2D-массив введенными пользователем значениями. Программа отлично работает, когда строки и столбцы имеют одно и то же значение (квадратная матрица). Но когда значения отличаются, он не печатает и выбрасывает исключение индекса за пределами границ, и я не могу понять, почему. Я приложил свой код ниже. Заранее спасибо!

public static void main(String[] args) {

    Scanner console = new Scanner (System.in);
    int x; //columns
    int y; //rows

    System.out.println("Enter the number of rows of the matrix:");
    y = console.nextInt();
    System.out.println("Enter the number of columns of the matrix:");
    x = console.nextInt();

    int [][] matrix = new int [y][x];
    fillMatrix(y, x, matrix);
}



public static void fillMatrix(int row, int col, int [][] matrix)
{
    Scanner console = new Scanner (System.in);
    int quantity = (row*col); //number of numbers in matrix

    System.out.println("Please enter " + quantity + " integers separated by spaces:");
        for(int cinput = 0; cinput < row; cinput++) //column
        {
            for(int rinput = 0; rinput < col; rinput++) //row
            {
                matrix[cinput][rinput] = console.nextInt(); //Read the line of integers to fill positions in the array.
            }
        }

        System.out.println();

        for(int i = 0; i < col; i++)
        {
            for(int j = 0; j < row; j++)
            {
                System.out.print(matrix[i][j] + " "); //Outputs the array in a xy grid.
            }
                System.out.println();
        } 
}

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

В выходном коде измените порядок i и j.

Так измените:

matrix[i][j]

На:

matrix[j][i]

И вам, вероятно, следует поменять местами порядок циклов for, чтобы строка находилась снаружи, а столбец - внутри.

Все вместе это выглядело бы следующим образом:

System.out.println();
for(int j = 0; j < row; j++)
{
    for(int i = 0; i < col; i++)
    {
        System.out.print(matrix[j][i] + " ");
    }
    System.out.println();
}
0 голосов
/ 29 марта 2020

Я бы сделал копию всех чисел, которые нужно вставить в матрицу. Держите счетчик, который будет увеличен только тогда, когда вы поместите значение в матрицу. Продолжайте увеличивать счетчик, пока у вас не останется больше значений. Когда вы закончите, просто выйдите из l oop.

Как-то так

Scanner myScanner = new Scanner (System.in);
int x; //columns
int y; //rows 
System.out.println("Enter the number of rows of the matrix:");
y = myScanner.nextInt();
System.out.println("Enter the number of columns of the matrix:");
x = myScanner.nextInt();

int [][] matrix = new int [x][y]; 


myScanner.nextLine();
System.out.println("Enter the numbers seperated by space:");
String input = myScanner.nextLine();

String tmp            [] = input.split(" "); //holds the numbers that are inputted (String)
int    numbers        [] = new int[tmp.length];//array that holds the parsed numbers

for(int i = 0 ; i <numbers.length; i++)
  numbers[i] = (int)(tmp[i].charAt(0) - '0');  //parsing the numbers

// Logic that matters
int counter = 0; 

for(int k = 0; k < matrix.length && counter < numbers.length; k++)
{
 for(int j = 0 ; counter < numbers.length &&  j < matrix[k].length; j++)
 {
     matrix[k][j] = numbers[counter];
     System.out.print(matrix[k][j]+" ");
     counter = counter + 1; 
 }
 System.out.println("");
}

Input-

Enter the number of rows of the matrix:
3
Enter the number of columns of the matrix:
1
Enter the numbers seperated by space:
1 2 3

Output -

1 2 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...