我的程序似乎忽略了我写的compareTo()

时间:2015-05-18 00:32:05

标签: java compareto

我获得了代码并且必须填写compareTo部分。无论出于何种原因,即使我注释掉我的compareTo代码,当我调用它时,Java仍然会给我一个结果,这让我相信我一定是在说错了。我对此感到茫然。

import java.util.Arrays;

public class testString implements Comparable<testString> {
    String tempStr;

    public testString(String str) {
        tempStr = str;
    }

    public String toString() {
        return tempStr;
    }

    public int compareTo(testString Str2) {
        String temp = Str2.toString();
        int temp1 = temp.length();

        if (tempStr.length() > temp1) {
            return 1;
        } else if (tempStr.length() < temp1) {
            return -1;
        } else {
            return 0;
        }      
    }  

    public static void main(String[] args) {   
        String [] Array1 = new String[]{"dog","giraffe","python","emu","elephant","cow"};

        System.out.print(Array1[1].compareTo(Array1[0]));
    }
}    

2 个答案:

答案 0 :(得分:2)

在main方法中创建的数组包含String个对象,而不是testString个对象。如果要比较testString类的实例,请创建这些对象的数组。

testString[] array1 = new testString[]{new testString("dog")...};

另请注意,类名应大写,变量以小写字母开头。

答案 1 :(得分:0)

因为Array1String的数组。 ; )所以它从compareTo调用String

你可能想要的是:

TestString[] array1 = new TestString[] {
    new TestString("dog"),
    new TestString("giraffe"),
    new TestString("python"),
    new TestString("emu"),
    new TestString("elephant"),
    new TestString("cow")
};

System.out.print(array1[1].compareTo(array1[0]));

作为旁注:

  • Java中的类按惯例(TestString)以大写字母开头。
  • Java中的变量按惯例(array1)以小写字母开头。
  • 您应该使用@Override注释:

    @Override
    public String toString() {...}
    @Override
    public int compareTo(...) {...}
    

    这将导致编译器错误并在出现问题时发出警告,而您实际上并未覆盖。 (例如错字或参数类型不正确。)