有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

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

    还要注意,类名应该大写,变量以小写字母开头

  2. # 2 楼答案

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

    你可能想要的是:

    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(...) {...}
      

      这将导致编译器错误,并在出现问题且您实际上没有重写时发出警告。(例如输入错误或参数类型不正确。)