public int compareTo(Card o) {
if (Values.indexOf(this.value) == Values.indexOf(o.value)) {
return Integer.valueOf(Colors.indexOf(this.color)).compareTo(Integer.valueOf(Colors.indexOf(o.color)));
} else {
return Integer.valueOf(Values.indexOf(this.value)).compareTo(Integer.valueOf(Values.indexOf(o.value)));
}
}
}
为什么必须用integer.valueOf????????
compareTo方法是Comparable接口的抽象方法,Integer类已经实现了,所以直接使用, 而他自定义的Card类要自己实现Comparable接口,所以才有这个CompareTo方法。 int是基本数据类型,并不是对象,你应该考虑的是这里填入int会不会自动装箱成Integer, 不能的话肯定要用Integer.valueOf转成Integer对象。
Values.indexOf(this.value)
这句话是错的,运行不了 values.indexOf() 能用于字符串中,但不可以是字符串数组,如果想用
改成这样
public final String[] colors = { "红桃", "黑桃", "方块", "梅花", "大" }; public final String[] values = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "王" }; public String VVV = "2345678910JQKA王 "; public String CCC = "梅花方块黑桃红桃小大 "; @Override public int compareTo(Card o) { // TODO Auto-generated method stub if (VVV.indexOf(this.value) != VVV.indexOf(o.value)) { return Integer.valueOf(VVV.indexOf(this.value)).compareTo(Integer.valueOf(VVV.indexOf(o.value))); } else { return Integer.valueOf(CCC.indexOf(this.color)).compareTo(Integer.valueOf(CCC.indexOf(o.color))); } } values 和 colors 是数组 而CCC和VVV才是字符串 或者把字符串数组强转为字符串也可以 StringBuilder str1 = new StringBuilder(""); for (int i=0; i<values.length; ++i) { str1 += values[i]; } stri.toString();
是不是compareTo比较的是integer而不能是int,而integer.valueOf等于是强转?是吗?
首先你看看API文档,这个
public int compareTo(Integer anotherInteger)
方法是int的包装类Integer的方法,参数也是一个Integer的实例对象;
其次,public static Integer valueOf()返回的真好是一个Integer的实例对象;
最后,你重写的public int compareTo(Card o)返回的是一个整数类型的值,而我上述中提到的方法compareTo()返回的也是个整数;
懂了没?