заполнить 2d массив 1d массивом Java - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть матрица и массив, и я хочу заполнить матрицу из значений массива.

float [][] mat = new float [m][n];
float [] array= new float [3];

Например:

обр = {1, 2, 3}

коврик размером 4 * 4

мат =

        {1, 2, 3, 1

         2, 3, 1, 2

         3, 1, 2, 3

         1, 2, 3, 1}

Как заполнить матрицу?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Исходя из вашего примера, вы хотите использовать значения в массиве для вставки строки в матрицу.

Сначала давайте построим нашу матрицу и значения массива:

int m = 3;
int n = 5;
float[][] mat = new float[m][n];
float[] array = {1,2,3,4};

Затем выполните итерацию матрицы для подготовки обновления:

for(int i = 0; i < m; i++){
    for(int j = 0; j < n; j++){
        // update here
    }
}

Итак, вы хотите использовать массив для установки значения, когда вы достигнете конца, вы начнете сначала.Я вижу два решения:

Использование индекса

Мы увеличиваем его, но по модулю возвращаемся к «0», когда достигаем длины массива.

int currentIndex = 0;
for(int i = 0; i < m; i++){
    for(int j = 0; j < n; j++){
        mat[i][j] = array[currentIndex];
        currentIndex = (currentIndex + 1 ) % array.length;
    }
}

Используя матричную координату

Или вы можете получить индекс, выполнив сумму обоих индексов матрицы, а затем снова по модулю, это позволит обновить любое значение без цикла (при необходимости)

for(int i = 0; i < m; i++){
    for(int j = 0; j < n; j++){
        mat[i][j] = array[(i+j)%array.length];
    }
}

Одна проблема с этим решением, вы не получите правильный вывод для матрицы, где m + n > Integer.MAX_VALUE просто потому, что сумма даст отрицательное значение, даст неверный индекс.

Выход

Вы можете увидеть результат, используя:

System.out.println(java.util.Arrays.deepToString(mat));

Оба решения дают:

[
    [1.0, 2.0, 3.0, 4.0, 1.0],
    [2.0, 3.0, 4.0, 1.0, 2.0],
    [3.0, 4.0, 1.0, 2.0, 3.0]
]
0 голосов
/ 17 апреля 2019

Нет необходимости указывать второй размер массива: float [][] mat = new float [m][];

Вот пример, как объявить матрицу массива:

int m = 5;
float[][] mat = new float[m][];
float[] array = new float[3];
for (int i = 0; i < m; i++) {
    mat[i] = array;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...