2016-05-12 49 views
0

让我给你一个例子,我想要实现的。只看数字,因为它是一款纸牌游戏。compareTo设置10之前2时排序价值

我:

harten5 klaveren4 klaveren7 schoppen5 ruiten5 schoppen2 klaverenheer schoppenheer schoppendame schoppen6 klaverenboer schoppen8 ruitenheer klaveren6... 

我想解决这对值:

schoppen2 harten2 ruiten2 klaveren2 ruiten3 harten3 schoppen3 klaveren3 klaveren4 harten4 schoppen4 ruiten4 harten5 schoppen5 ruiten5... 

但2这样我才拿到10:

schoppen10 ruiten10 harten10 klaveren10 schoppen2 harten2 ruiten2 klaveren2 ruiten3 harten3 schoppen3 klaveren3... 

这是我的基本比较方法:

@Override 
public int compareTo(Card p) { 
    return this.value.compareTo(p.value); 
} 

回答

1

因为String的(我猜this.valueStringcompareTo字典顺序比较,而你想要数值。所以,你必须重新实现它,取子串(或找到最后一部分是一个数字,将其转换为Integer,然后用户compareToInteger

在一般情况下,我觉得你的类卡可以改进一下。特别是,我将它改写:

 class Card { 
     private String value; 
     private Integer rank; 


     ... 

     public int compareTo(Card c) { 
      // Additional logic if you need to consider 
// also value (suite) in comparison 
      return this.rank.compareTo(c.rank); 
     } 
     } 

但你也可以使用一个enum用于此目的

String java API compareTo

+0

你明白我的问题,但我不能使用INT(请参阅评论其他答案) – Skupaj

+0

@Skupaj,你可以通过只重写compareTo来做到这一点,但它会是丑陋的... – ACV

+0

我知道...我试过收集返回到一个数组,但没有成功 – Skupaj

1

我猜你想要相反的顺序?如果是这样,那么就改变你实现这样的:

@Override 
public int compareTo(Card p) { 
    return p.value.compareTo(this.value); 
} 

这要看是什么“价值”的类型是和“的compareTo”是如何实现的。或者,你可能只是这样做,如果“价值”是一个整数:

@Override 
public int compareTo(Card p) { 
    return this.value - p.value; 
} 
+0

我不想扭转它和值是一个字符串,而不是一个int而是一个字符串,因为卡迪尔是这样的... 8 9 10球棒钻石... – Skupaj

+0

我做的一切权利,除了10之前被放置在2 – Skupaj

+0

这是因为10被比较为一个字符串。 '1'在'2'之前。这就是为什么。因此,'1'后跟'0'在'2'之前。 –

1

我相信你值以字符串形式存储。如果你不想改变的值的数据类型,可以实现下列方式compareTo方法:

public int compareTo(Card p) { 
     return Integer.parseInt(this.value).compareTo(Integer.parseInt(p.value)); 
    }