Кажется, моя программа игнорирует мой метод 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 ответа

Массив, созданный в методе main, содержит String объекты, а не testString объекты. Если вы хотите сравнить экземпляры testString класс, а затем создать массив этих объектов.

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

Также обратите внимание, что имена классов должны быть заглавными, а переменные начинаются со строчной буквы.

Так как Array1 это массив String,;) Так и зовет 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(...) {...}
    

    Это приведет к ошибке компилятора и предупредит вас, если есть проблема, и вы на самом деле не перезаписываете. (Например, при опечатке или неверном типе параметра.)

Другие вопросы по тегам