问答详情
源自:7-1 简易扑克牌游戏

看他们写的compareTO方法中

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????????

提问者:qq_之恩赫奥丶_0 2016-05-23 00:23

个回答

  • ixenos
    2016-06-15 01:44:07

    compareTo方法是Comparable接口的抽象方法,Integer类已经实现了,所以直接使用,
    而他自定义的Card类要自己实现Comparable接口,所以才有这个CompareTo方法。
    
    int是基本数据类型,并不是对象,你应该考虑的是这里填入int会不会自动装箱成Integer,
    不能的话肯定要用Integer.valueOf转成Integer对象。


  • 染红_街道
    2016-05-29 21:03:57

    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();


  • qq_之恩赫奥丶_0
    2016-05-23 17:27:13

    是不是compareTo比较的是integer而不能是int,而integer.valueOf等于是强转?是吗?

  • 一一梦灬红尘
    2016-05-23 16:11:25

    5742b9a30001ce7905000152.jpg

    5742b9a4000129ab05000296.jpg

    首先你看看API文档,这个

    public int compareTo(Integer anotherInteger)
    方法是int的包装类Integer的方法,参数也是一个Integer的实例对象;

    其次,public static Integer valueOf()返回的真好是一个Integer的实例对象;

    最后,你重写的public int compareTo(Card o)返回的是一个整数类型的值,而我上述中提到的方法compareTo()返回的也是个整数;

    懂了没?