Сортировка объектов Java ArrayList - PullRequest
0 голосов
/ 06 декабря 2011

У меня проблема с сортировкой ArrayList моих собственных объектов.

Мой класс этих объектов выглядит так:

public class Robal {
    int[] gen = new int[5];
    int fit;
    Random losuj = new Random();

    public Robal(int przelacz) {
        for (int i=0; i<5; i++ ) {
            gen[i]=losuj.nextInt(2);
        }
        fit=dopasuj(gen, przelacz);    
    }

    int dopasuj(int[] gen, int przelacz)    {
        int toDec=(gen[0]*1)+(gen[1]*2)+(gen[2]*4)+(gen[3]*8)+(gen[4]*16);
        return y(toDec, przelacz);
    }

    int y(int toDec, int przelacz) {
        if (przelacz == 1) {
            return toDec*toDec;
        } else if (przelacz == 2) {
            return 1;
        } else if(przelacz == 3) {
            return 1;
        } else if(przelacz == 4) {
            return 1;
        } else {
            return 1;
        }
    }

    void drukuj(int i) {
        System.out.println("Geny Robala "+i+": "+gen[0]+" "+gen[1]+" "+gen[2]+" "+gen[3]+" "+gen[4]+"\tfit:"+fit);
    }
}

, а класс My Main:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class PE {

public static void main (String[] args){
ArrayList<Robal> Robale = new ArrayList<Robal>();
int i=0;
while(i!=5){
Robale.add(new Robal(1));
i++;
}
Robale.get(0).drukuj(1);
Robale.get(1).drukuj(2);
Robale.get(2).drukuj(3);
Robale.get(3).drukuj(4);

Collections.sort(Robale, new Comparator<Robal>() {
public int compare(Robal a, Robal b){
return a.fit - b.fit;
}
});

Robale.get(0).drukuj(1);
Robale.get(1).drukuj(2);
Robale.get(2).drukuj(3);
Robale.get(3).drukuj(4);


}


}

но большую часть времени данные до и после сортировки не совпадают ... пример результата:

Geny Robala 1: 0 1 1 0 0 fit:36
Geny Robala 2: 1 0 1 0 1 fit:441
Geny Robala 3: 1 1 0 0 1 fit:361
Geny Robala 4: 0 1 1 1 0 fit:196
Geny Robala 1: 0 1 1 0 0 fit:36
Geny Robala 2: 0 0 0 1 0 fit:64
Geny Robala 3: 0 1 1 1 0 fit:196
Geny Robala 4: 1 1 0 0 1 fit:361

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

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

1 голос
/ 06 декабря 2011

Вы уверены, что не создаете новый Robal при сортировке списка? это приведет к смещению случайных значений

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