Уточнение 2-D массивов - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть код, который умножает 2 массива вместе 6x6 на 3x3, но вывод получается в 2D массиве 6x6, когда мне нужно, чтобы он был в 2D массиве 4x4.

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

[20, 0, 10, 10, 0, 20]
[20, 0, 10, 10, 0, 20]
[20, 0, 10, 10, 0, 20]
[20, 0, 10, 10, 0, 20]
[20, 0, 10, 10, 0, 20]
[20, 0, 10, 10, 0, 20]

Когда мне нужно, чтобы он выглядел следующим образом

[0, 10, 10, 0]
[0, 10, 10, 0]
[0, 10, 10, 0]
[0, 10, 10, 0]

Придется ли мне переделывать код зацикливания или я могу сделать новый l oop, который заполняет массив средними частями моего текущего вывода

Я не могу опубликовать код из-за правил плагиата, но причина, по которой я не вывожу 4x4, заключается в том, что я продолжаю получать Out ошибки границ.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Создайте массив с двумя меньшими строками и скопируйте середину каждой строки, используя Arrays.copyOfRange:

public int[][] arrayMiddle(int[][] array) {
    int[][] out = new int[array.length - 2][];
    for (int i = 1; i < array.length - 1; ++i) {
        out[i-1] = Arrays.copyOfRange(array[i], 1, array[i].length - 1);
    }
    return out;
}
0 голосов
/ 23 апреля 2020

Попробуйте этот пример кода, используйте его в качестве примера
Поскольку вы не можете показать свой код, надеюсь, это работает для вас

int firstarray[][] = {{20, 0, 10, 10, 0, 20}, {20, 0, 10, 10, 0, 20}, {20, 0, 10, 10, 0, 20}, {20, 0, 10, 10, 0, 20}, {20, 0, 10, 10, 0, 20}, {20, 0, 10, 10, 0, 20}};

int secondarray[][] = {{0, 10, 10, 0}, {0, 10, 10, 0}, {0, 10, 10, 0}, {0, 10, 10, 0}};

/* Create new 2d array to store the multiplication result using the original arrays' lengths on row and column respectively. */


int [][] resultArray = new int[firstarray.length][secondarray[0].length];


/* Loop through each and get the product, then sum up and store the value */

for (int i = 0; i < firstarray.length; i++) { 
for (int j = 0; j < secondarray[0].length; j++) { 
    for (int k = 0; k < firstarray[0].length; k++) { 
        resultArray[i][j] += firstarray[i][k] * secondarray[k][j];
    }
}
}

/* Show the result */
display(resultArray);
...