2012-03-23 13 views
1

Arrays.sortのカスタマイズに関するチュートリアルを読んだことがありますが、私は答えが不足しています。今すぐ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; 
     } 
    } 
} 

主なアクティビティは、一連のものです。 arrays.sortを扱う部分は次のとおりです。

//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()をテストしましたか? –

+0

アイデアをありがとう。私がロードしていたデータは、私に答えを与えてくれませんでしたが、私はこのテストを検討していませんでした。 – Billdr

答えて

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 

、実際のコーディングについて:クラスcharacterの命名

  1. が混乱して、あなたはそれを名前変更を検討してください。
  2. javaでは、クラス名は大文字で始まります。それは、仲間のプログラマーがフィールドではなくクラスであることを容易に理解するのを助ける。character
+0

私はそれを見ていない〜3時間を費やしたと信じていません。ありがとうございます。 – Billdr

+0

あなたは@Hiverzzです。お役に立てて嬉しいです。 – amit

関連する問題