Анализ массива диагональных окрестностей и сортировка - PullRequest
1 голос
/ 29 октября 2011

Я боролся с этим в течение некоторого времени и, похоже, ничего не получилось. Настройка такова; У меня есть 2D-массив. Для этого массива мне нужно перебрать каждое значение и вернуть диагональных соседей (5 значений). Эти соседи будут помещены в новый массив 1D [5] и отсортированы по пузырькам. Среднее значение (медиана) будет затем возвращено и помещено в новый массив медиан.

Пока у меня есть методы для извлечения диагональных соседей:

    //get diagonals from original DEM

    double [] getDiagonals(int i, int j) {

        double [] tempArray = new double [5];

        tempArray[0] = data[i -1][j +1];
        tempArray[1] = data[i -1][j -1];
        tempArray[2] = data[i][j];
        tempArray[3] = data[i +1][j -1];
        tempArray[4] = data[i +1][j +1];


        return tempArray;
    }

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

        //get diagonals for each 

    double [] []   bubbles(){

        double [] [] datap = new double [298] [298];

        for (int i = 1; i < data.length; i++){
            for (int j = 1; j < data[i].length; j++) {
                if ((i > 0) && (j > 0)) {
                    if ((i < data.length-1) && (j  < data.length-1)){

                         double [] tempArray = getDiagonals(i, j);
//do something with the tempArray

Я думаю, что именно здесь я отклеиваюсь. Благодаря тестированию метод getDiagonals работает нормально. Я изо всех сил пытаюсь получить tempArray из метода bubbles (). Если я устанавливаю выходные данные как tempArray, он возвращает только 5 значений, рассчитанных для нижнего правого угла исходного массива.

Я пытался вызывать другие методы в методе bubbles (), чтобы выполнить всю обработку там и вернуть новый массив:

    //get diagonals for each 

    double [] []   bubbles(){

        double [] [] datap = new double [298] [298];

        for (int i = 1; i < data.length; i++){
            for (int j = 1; j < data[i].length; j++) {
                if ((i > 0) && (j > 0)) {
                    if ((i < data.length-1) && (j  < data.length-1)){

                         double [] tempArray = getDiagonals(i, j);
                         double sorted [] = sort(tempArray);
                         double median = sorted[2];


                            for (int z = 0; z < datap.length; z++){
                                for (int y = 0; y < datap[z].length; y++){
                                datap[z][y] = median;
                                }
                            }   



                    }
                }   
            }
        }
        return datap;
    }

Опять же, это не получается, и выходной массив данных - просто нули. Приведенный выше метод sort () передал диагонали методу пузырьковой сортировки (который, как я знаю, работает на его

Полагаю, мой вопрос заключается в том, как обработать итеративный метод и заполнить новый массив?

Надеюсь, это имеет смысл, но если вам нужно больше подробностей, пожалуйста, дайте мне знать. И да, я использую пузырьковую сортировку. Я знаю, что это мусор, но это курс, который я делаю, поэтому его нужно использовать. И да, я довольно новичок в Java.

Любая помощь будет принята с благодарностью (и я даже буду ссылаться на вас, если мне понадобится использовать какой-то код, который вы предоставляете;)

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

Наконец взломали его. Для заполнения всего массива следующий код работает персиком.

//Diagonal to 1dArray and sorting

double [] [] bubbles()
{
    double [][] tempArray = new double [300][300];

    int y = 0;
    int z = 0;
    double median = 0;

    for (int i = 0; i < data.length; i++)
    {
        for (int j = 0; j < data[i].length; j++)
        {
            if ((i > 0) && (j > 0))
            {
                if ((i +1 < data[i].length) && (j +1 < data[j].length))
                {
                    double [] diagonals = getDiagonals(i, j);

                    //Need to sort here
                    median = diagonals[2];
                    tempArray[i][j] = median;
                }
            }
        }
    }
    return tempArray;
}

Сортировка снята, и я еще не проверял ее; но пока это обеспечивает новые значения для всех ячеек в массиве temp.

0 голосов
/ 29 октября 2011

Основная проблема, которую я вижу, заключается в том, что при каждом обходе через ваш внутренний цикл:

for (int i = 1; i < data.length; i++){             
   for (int j = 1; j < data[i].length; j++) {

Где вы звоните:

double [] tempArray = getDiagonals(i, j);

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

Вам необходимо заменить этот раздел своего кода:

for (int z = 0; z < datap.length; z++){
    for (int y = 0; y < datap[z].length; y++){
    datap[z][y] = median;
    }
}   

Вы можете объявить int y, z в начале метода и сделать что-то вроде этого:

if (y < datap.length){
    if (z == datap.length[y] - 1){
        y++;
        z = 0;
    }

    datap[y][z] = median;
    z++;
}

Таким образом, вы назначаете только определенный индекс в datap, который вы пытаетесь достичь, вместо того, чтобы сбрасывать каждое из его значений.

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