2014-09-26 89 views
0

我有一个比较的3个值进行排序:机器人,比较排序错误

  1. ORDER_BY_Points
  2. ORDER_BY_Gdif //目标差异
  3. ORDER_BY_Goals

首先,我从拿到阵列json字符串。我的阵列发送到StandingsSort.ORDER_BY_RULES

Arrays.sort(addressArray, StandingsSort.ORDER_BY_RULES); 

这里是我的代码:

static final Comparator<Standings> ORDER_BY_Points = new Comparator<Standings>() { 
    public int compare(Standings a1, Standings a2) { 
     return a1.points.compareTo(a2.points); 
    } 
}; 
static final Comparator<Standings> ORDER_BY_Gdif = new Comparator<Standings>() { 
    public int compare(Standings a1, Standings a2) { 
     return a1.Gdif.compareTo(a2.Gdif); 
    } 
}; 
static final Comparator<Standings> ORDER_BY_Goals = new Comparator<Standings>() { 
    public int compare(Standings a1, Standings a2) { 
     return a1.goalsP.compareTo(a2.goalsP); 
    } 
}; 

static final Comparator<Standings> ORDER_BY_RULES = new Comparator<Standings>() { 
    public int compare(Standings a1, Standings a2) { 
     int i = ORDER_BY_Points.compare(a1,a2); 
     if(i == 0){ 
      i = ORDER_BY_Gdif.compare(a1,a2); 
      if(i == 0){ 
       i = ORDER_BY_Goals.compare(a1,a2); 
      } 
     } 
     return i; 
    } 
}; 

class Standings { 

    String teamName; 
    String goalsP; 
    String goalsM; 
    String Gdif; 
    String points; 
    @Override 
    public String toString() { 
     return "" + teamName + "," + goalsP + ":" + goalsM + "," + Gdif + "," + points + ""; 
    } 
    public Standings(String teamName, String goalsP, 
       String goalsM, String Gdif, String points) { 
     super(); 
     this.teamName = teamName; 
     this.goalsP = goalsP; 
     this.goalsM = goalsM; 
     this.Gdif = Gdif; 
     this.points = points; 
    } 
} 

但结果也不行!这里是结果

Name, Goals, GDif, Points 
Team,11:9,2,10 
Team,5:3,2,10 
Team,9:2,7,11 
Team,0:6,-6,2 
Team,3:9,-6,2 
Team,6:9,-3,3 
Team,8:13,-5,3 
Team,8:9,-1,5 
Team,8:11,-3,5 
Team,8:7,1,5 

为什么比较器排序错误?

+1

您使用哪种方式获得您的结果? – 2014-09-26 19:24:24

+0

@clever_trevor Arrays.sort(addressArray,StandingsSort.ORDER_BY_RULES); – sarahsdev 2014-09-26 19:37:26

+0

请修改您的帖子。你先给出结果,然后告诉你在那之后你做了什么。更令人困惑的是“之后我做了”。因为看起来好像在获得结果后这样做。所以首先告诉你使用哪种排序,然后给出结果。 – greenapps 2014-09-27 07:16:10

回答

2

由于您将点数存储为String s,因此“10”位于“2”,“3”和“5”之前。如果您想按数字顺序比较这些数据,则需要先将它们转换为int

同样,Gdif和目标的比较为String这可能不是你想要的。

+0

好的。但是bettere将会改变所有'字符串目标'; String goalsM; String Gdif; 弦乐点数;'在积分榜上整数。 – greenapps 2014-09-29 06:59:58