нужна помощь с домашним заданием - PullRequest
0 голосов
/ 15 марта 2012

Это задание: написать метод, который сортирует элементы матрицы с 2 измерениями.Например,

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;
}

}

Ответы [ 2 ]

1 голос
/ 15 марта 2012

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

Я дам небольшой совет, как можно выполнить копирование из массива 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 голосов
/ 15 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...