2012-03-15 3 views
0

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

sort({{1,4}{2,3}}) 

возвратит матрицу

{{1,2}{3,4}}. 

Я не знаю, что я делаю неправильно в моем коде причины выхода я получаю 3,0, 3,0, 4,0, 4,0.

Это то, что у меня есть до сих пор любая помощь была бы оценена.

public static void main(String[] args) { 
    double[][] array = { {1, 4}, {2, 3} }; 
    double[][] new_array = sort(array); 
    for(int i = 0; i < array.length; i++) { 
     for(int j = 0; j < array.length; j++) { 
      System.out.print(new_array[i][j] + " "); 
     } 
    } 

} 

public static double[][] sort(double[][] array) { 
    double[] storage = new double[array.length]; 
    for(int i = 0; i < array.length; i++) { 
     for(int j = 0; j < array.length; j++) { 
      storage[i] = array[i][j]; 
     } 
    } 
    storage = bubSort(storage); 
    for(int i = 0; i < array.length; i++) { 
     for(int j = 0; j < array.length; j++) { 
      array[i][j] = storage[i]; 
     } 
    } 
    return array; 
} 

public static double[] bubSort(double[] list) { 
    boolean changed = true; 
    double temp; 
    do { 
    changed = false; 
    for (int j = 0; j < list.length -1; j++) 
    if (list[j] > list[j + 1]) { 
     temp = list[j]; 
     list[j] = list[j + 1]; 
     list[j + 1] = temp; 
     changed = true; 
    } 
    } while (changed); 
    return list; 
} 

} 
+1

Добро пожаловать в SO. К сожалению, это не так, как работает этот сайт. Вы не можете просто скомпоновать код здесь и ожидать, что кто-то прочитает все это и отлаживает его для вас. Вы пробовали пройти через него в отладчике? Это, как правило, первое, что нужно сделать. Пожалуйста, прочитайте [faq] и [ask] рекомендации по размещению вопросов здесь. –

ответ

1

Основная проблема, с которой вы сталкиваетесь, заключается в том, как вы копируете значения из массива 2d в 1d-массив. Фактически вы копируете только два значения в массив длиной 2. Длина массива 2d не является полной длиной m x n.

Я дам небольшой намек на то, как вы можете копировать из массива 2d в массив 1d, но вам решать, как копировать из массива 1d в массив 2d. Кроме того, как бы вы могли найти всю длину массива?

double[] storage = new double[4];//You should calculate this value 
    int k = 0; 
    for (int i = 0; i < array.length; i++) { 
     for (int j = 0; j < array.length; j++) { 
      storage[k++] = array[i][j]; 
     } 
    } 

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

+0

Большое спасибо, это то, что я искал :) – Kelpocalypse

0

Вы переписываете свой массив хранения, который у вас установлен на массив [i]. Поскольку он находится в цикле for, вы устанавливаете память [0] = array [0] [0], а затем устанавливаете память [0] = array [0] [1]. Это заставляет вас забирать только последнее число в этом измерении массива. Аналогично, когда вы читаете их обратно, вы вставляете один и тот же номер дважды. Поскольку 4 и 3 являются последними двумя числами в их соответствующих размерах, это показывает, что вы сортируете массив. Вам нужен цикл for для хранения, который установлен в < array.length и сохраняет ваши значения внутри него.

Смежные вопросы