Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java自定义ArrayList对象排序_Java_Sorting_Collections_Arraylist - Fatal编程技术网

Java自定义ArrayList对象排序

Java自定义ArrayList对象排序,java,sorting,collections,arraylist,Java,Sorting,Collections,Arraylist,我对自己对象的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); }

我对自己对象的
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);
    }
}

您确定在对列表排序时没有实例化新Robal吗?这将导致随机值移位

您将向数组中添加5项,并在排序前后仅打印4项。似乎未排序列表中的第5项进入了前4名。你能再打印一个项目,看看情况是否良好吗?

你如何比较这些数据?哪些数据在讨论?数组中的对象是否已修改?否数据不会以任何方式修改…假设第二个四行是对前四行中显示的对象进行排序的结果,“适合”的值是按顺序排列的,与每个“适合”值关联的数字列表在前后都不会更改。那有什么问题?我觉得很好。您是如何从
1 0 1 0 1拟合:441
变为
0 0 1 0拟合:64
的?确定发现问题。。。这里:虽然(i!=5){错误的数字…我有5个Robal实例。。。
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