Как преобразовать одномерный массив в 2D по основным столбцам

#java #arrays #multidimensional-array

#java #массивы #многомерный массив

Вопрос:

допустим, у меня есть одномерный массив, подобный int[] x = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16} .
Я хотел бы преобразовать его в 2D, где это выглядит как:

 1 5  9 13  
2 6 10 14  
3 7 11 15  
4 8 12 16  
  

В настоящее время у меня есть

 for (int i = 0; i < 4; i  )
{
    for (int j = 0; j < Nb; j  )
        s[i][j] = x[i   j];
}
  

Однако это не работает. Как бы мне это сделать?

Комментарии:

1. Этот двумерный массив выглядит очень случайным…

Ответ №1:

Попробуйте

 for (int i = 0, k=0; i < 4; i  )
  for (int j = 0; j < Nb; j  )
    s[j][i] = x[k  ]; // you may want s[i][j]
  

Комментарии:

1. спасибо, что это тоже работает, зачем мне s [i] [j], это не сработало бы.

2. Это зависит от того, считаете ли вы, что первый поиск выполняется по строке или столбцу. В ваших примерах есть s[i][j] , которые могут быть действительными в зависимости от того, как вы на это смотрите.

3. что такое Nb в вашем цикле for?

4. @KickButtowski То же, что и в исходном вопросе. Я предполагаю, что это могло бы быть 4 .

5. есть ли какой-либо общий случай для решения этой проблемы? можете ли вы предоставить мне какой-либо учебник, чтобы я мог изучить логику?

Ответ №2:

Я предполагаю, что stray 7 была опечаткой?

Поскольку мы хотим, чтобы внутренний цикл перемещался вниз, а внешний — вправо, вы можете сделать это:

 for i in (0..width)
   for j in (0..height)
      s[j][i] = x[i*height j]
  

Отслеживание этого иллюстрирует, почему это работает:

 s[0][0] = x[0*4 0] = x[0]
s[1][0] = x[0*4 1] = x[1]
...
s[0][1] = x[1*4 1] = x[5]
  

Ответ №3:

Понятия не имею, что Nb такое, но вы сильно сбились с чтения исходного массива. Попробуйте что-то вроде этого:

 for (int i = 0; i < 4; i  )
    for (int j = 0; j < 4; j  )
        s[j][i] = x[i*4   j];