2012-03-23 58 views
1

我已經閱讀了一些關於自定義Arrays.sort和大量使用Google的教程,但我錯過了答案。現在Arrays.sort(charList)什麼都不做。這是我的代碼的樣子。Java中的自定義對象數組排序不分類

public class character implements Comparable<character>{ 

//public vars 
public String charName; 
public int initModifier; 
public int initRoll; 
public int secondInit; 
/* ... getters, setters, other vars .. */ 
    @Override 
    public int compareTo(character another) { 
     int compareInit = ((character) another).getTotalInit(); 
     int comp = this.totalInit - compareInit; 
     int compareSecondInit = ((character) another).getTotalInit(); 

     if (comp != 0) 
     { 
      return comp; 
     } 
     else 
     { 
      return this.secondInit - compareSecondInit; 
     } 
    } 
} 

主要活動是一捆東西。處理陣列的部分如下:

//add a character to the array. 
public void addResults(character c) 
{ 
    debugInt++; //using this to debug 
    if(debugInt==3) 
    { 
     Log.d(tag,charList[0].charName); //always prints the first object entered 
     Log.d(tag,charList[1].charName); //always prints the second object entered 
    } 
    if (playersPerTurn<charLimit) 
    { 
     charList[playersPerTurn]=c; 
     Arrays.sort(charList,0,playersPerTurn); 
     playersPerTurn++; 
     updateDisplay(); 
    } 
} 

幫助我所以,你是我唯一的希望。

+0

您是否嘗試過測試'compareTo()'創建幾個'字符並打印出比較結果? – 2012-03-23 20:53:27

+0

感謝您的想法。我正在加載的數據不會在那裏給我一個答案,但我沒有考慮這個測試。 – Billdr 2012-03-24 02:35:06

回答

2
int compareSecondInit = ((character) another).getTotalInit(); 

你可能想要getSecondInit()這裏。
您的compareTo()與此錯誤不一致 - 因此結果未定義。

例如:

element1: 
totalInit = 1 
secondInit = 2 
element2: 
totalInit = 1 
secondInit = 2 

element1.compareTo(element2) == 2 - 1 == 1 
element2.compareTo(element1) == 2 - 1 == 1 

作爲一個側面說明,關於編碼實踐:

  1. 命名類character是混亂的,你應該考慮重新命名它。
  2. 在java中,約定是類名以大寫字母開頭。這將幫助其他程序員輕鬆理解character是一個類而不是字段。
+0

我不相信我花了三個小時沒看到。謝謝阿米特。 – Billdr 2012-03-23 21:00:21

+0

不客氣@Hiverzz。很高興我能幫上忙。 – amit 2012-03-23 21:02:51

相關問題