Исходя из вашего примера, вы хотите использовать значения в массиве для вставки строки в матрицу.
Сначала давайте построим нашу матрицу и значения массива:
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]
]