2012-05-11 8 views
1

Я пытаюсь взять массив, содержащий 400 целых чисел, и разбить его на двумерный массив 20x20. Я думал, что у меня есть правильный алгоритм, но сумма 1-D массива не соответствует сумме двухмерного массива, поэтому я, очевидно, что-то делаю неправильно. Вот мой код:Превращение одномерного массива в двумерный массив

private static void processArray(int[] inArray) 
{ 
    int[][] array = new int[20][20]; 

    for (int x = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
      for (int z = 0; z < 400; z++) 
      { 
       array[x][y] = inArray[z]; 
      } 
     } 
    } 
} 

Что я делаю неправильно?

ответ

2

Вы назначаете последний элемент входного массива каждому элементу в выходном массиве. Внутренний цикл над входным массивом должен быть заменен на одно назначение, которое выбирает правильный входной элемент.

private static void processArray(int[] inArray) 
{ 
    int[][] array = new int[20][20]; 

    for (int x = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
      array[x][y] = inArray[x * 20 + y]; // or devise your own calculation 
     } 
    } 
} 
+0

Спасибо! Я соглашусь через несколько минут :) –

3

Для каждой пары x и y, код присваивает каждый значение от inArray к array[x][y]. Это явно неверно.

Вот один из способов исправить код:

private static void processArray(int[] inArray) 
{ 
    int[][] array = new int[20][20]; 

    for (int x = 0, z = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
      array[x][y] = inArray[z++]; 
     } 
    } 
} 
2

Существующий подход присвоят каждый элемент в массиве с последним элементом в оригинале.

Вы не должны перебирать z, но используйте его в качестве счетчика в тех же петлях.

int z = 0; 
for (int x = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
       array[x][y] = inArray[z++]; 
     } 
    } 
1

Вы в основном назначая массив [х] [у], равный inArray [0], то inArray [1], а затем inArray [2], вплоть до [400].

Я хотел бы сделать что-то вроде

private static void processArray(int[] inArray) 
{ 
    int[][] array = new int[20][20]; 

    for (int x = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
      array[x][y] = inArray[x * 20 + y]; 
     } 
    } 
} 
Смежные вопросы