2011-12-06 74 views
0

我对排序我自己的对象的ArrayList有问题。Java定制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); 
    } 
} 

和我的主类是:

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 
+0

如何比较数据? –

+0

哪些数据正在讨论?数组内的对象是否被修改? –

+0

不以任何方式修改数据... –

回答

1

您确定没有实例化新的Robal吗? e整理列表?这会导致随机值发生移位

+0

好的问题发现...这里: while(i!= 5){ 错误的号码...我有5个Robal实例... –

1

您正在将5个项目添加到数组中,并在排序前后仅打印4个项目。看起来,未排序列表中的第5个项目使其排在前4位。您能否再打印一个项目并查看项目是否看起来不错?