Комментарии Javadoc - CompareTo?

Моя книга просит меня написать комментарий Javadoc для раздела кода. По большей части я понимаю, как делать javadocs, но не понимаю, что делает программа.

«Напишите комментарий Javadoc для следующего метода класса Person. Предположим, что класс Person имеет два поля данных String lastName и firstName с очевидным значением. При необходимости укажите предварительные и постусловия».

public int compareTo(Person per) {
    if (lastName.equals(per.lastName))
        return firstName.compareTo(per.firstName);
    else
        return lastName.compareTo(per.lastName);
}

/**
 * Method to return?
 *
 * @param compare the firstName lexicographically
 * @param compare the lastName  lexicographically
*/

Я на самом деле понятия не имею, что это делает. Он возвращает число? Я посмотрел примеры на

http://www.tutorialspoint.com/java/java_string_compareto.htm


person beginningprogrammer    schedule 11.08.2015    source источник
comment
I actually have no idea what this is doing...хорошо, я могу сказать, что компиляция - это то, чем он не занимается. В Java нет ключевого слова Public. Просто Google Javadoc и посмотрите учебник.   -  person Tim Biegeleisen    schedule 11.08.2015
comment
Вот что задает вопрос, действительно странно. Он говорит, что публичный, а не публичный.   -  person beginningprogrammer    schedule 11.08.2015
comment
Похоже, вам не хватает оператора if. Без этого я тоже не могу сказать, что он делает. Сказав это, этот compareTo использует другой compareTo, который определен для String объектов, и вы можете узнать, что это значит, просмотрев документацию здесь.   -  person ajb    schedule 11.08.2015
comment
Вы правы, я пропустил оператор if. Предполагается читать, если (lastName.equals(per.lastName)   -  person beginningprogrammer    schedule 11.08.2015
comment
Я не знаю, почему все сходят с ума из-за того, что ваш код не компилируется. Да, вы должны опубликовать правильный код при обращении за помощью, но ваш вопрос мне достаточно ясен.   -  person dimo414    schedule 11.08.2015
comment
Я не виню их, я должен был разместить это правильно в первый раз.   -  person beginningprogrammer    schedule 11.08.2015


Ответы (5)


Вы уверены, что это не похоже на это?

Public int compareTo(Person per) {
    if(firstName.compareTo(per.firstName) != 0){
        return firstName.compareTo(per.firstName);
    }
    else{
        return lastName.compareTo(per.lastName);
    }

}

Этот код будет упорядочен на основе лексикографического порядка имени, если они совпадают, он затем отсортирует фамилию.

Каждый метод compareTo возвращает -1, 0 или 1 в зависимости от того, появляется ли первая строка раньше в порядке или нет.

person Pumphouse    schedule 11.08.2015
comment
Да, вы правы, я забыл добавить оператор if. Спасибо, это начинает иметь смысл. Так что же это делает? Сравните набор firstName с Per.firstName и посмотрите, совпадают ли они? Если они возвращаются -1? я все еще немного потерян - person beginningprogrammer; 11.08.2015
comment
@beginningprogrammer проверяет имя. Если они совпадают, он проверяет второе имя. Например, скажем, имена Энди и Барб. Andy.compareTo(Barb) возвращает -1, так как a предшествует B. Barb.comparTo(Andy) возвращает 1, так как B лексиграфически больше, чем A. Если они одинаковые, Andy.compareTo(Andy) вернет 0. - person Pumphouse; 11.08.2015
comment
@beginningprogrammer, если они одинаковы, то у них может быть одно и то же имя, поэтому оно переходит к фамилии и делает то же самое. Если это возвращает 0, это одно и то же имя и фамилия. - person Pumphouse; 11.08.2015
comment
@beginningprogrammer метод compareTo используется другими структурами данных для упорядочения записей. Например, если вы поместите это в список и вызовете sort, он будет использовать метод compareTo для сортировки списка. - person Pumphouse; 11.08.2015

«Лексографически» означает, что он будет отображаться после другой строки или перед другой строкой, если отсортирован по значению Unicode ее символов (с выравниванием по левому или правому краю).

Добавьте это в свой код и покажите нам результат -

System.out.println(Arrays.toString((per.firstName).getBytes())); 
System.out.println(Arrays.toString((firstName).getBytes()));

System.out.println(Arrays.toString((per.lastName).getBytes()));
System.out.println(Arrays.toString((lastName).getBytes()));
person Piyush Mittal    schedule 11.08.2015

Давайте уберем это сейчас: это синтаксически недопустимый код. Правильный код будет выглядеть так:

public int compareTo(Person per) {
    if(firstName.compareTo(per.firstName) != 0) {
        return firstName.compareTo(per.firstName);
    } else {
        return lastName.compareTo(per.lastName);
    }
}

Теперь к Javadoc, который у вас есть.

  • @param указывает допустимые параметры функции. У вас есть только одно, поэтому у вас может быть только одно объявление @param.
  • Поскольку этот метод возвращает значение, вам нужно иметь объявление @return.

Это изменит ваш Javadoc на это.

/**
* Method to return?
*
* @param per the person
* @return a value < 0, 0, or > 0 if...
*/
public int compareTo(Person per) {
    if(firstName.compareTo(per.firstName) != 0) {
        return firstName.compareTo(per.firstName);
    } else {
        return lastName.compareTo(per.lastName);
    }
}

В разделе после /** размещается конкретная информация о реализации; вещи, которые полезно знать тем, кто использует этот метод. Учитывая, что этот метод не проверяет, является ли любое имя или фамилия null или нет, было бы полезно указать это здесь. Остальное я оставлю в качестве упражнения для читателя.

person Makoto    schedule 11.08.2015

Во-первых, ваш метод compareTo мне не кажется подходящим: - Public должен быть общедоступным.

Во-вторых, ваш метод сравнивает два объекта Person на основе лексикографически firstName или lastName, то есть в алфавитном порядке (A предшествует B или A‹B) и возвращает целочисленное значение.

Например:-

     String firstName1="B";
     String firstName2="A";
     String firstName3="B";
     String firstName4="C";

     System.out.println(firstName1.compareTo(firstName2));
     System.out.println(firstName1.compareTo(firstName3));
     System.out.println(firstName1.compareTo(firstName4));

Output: 1
 0
-1

Если firstName1 ‹ firstName3, то -1 (отрицательное целое число, первое меньше второго)
Если firstName1 › firstName2, то 1 (положительное целое число, первое больше второго)
Если firstName1 == firstName2, то 0 (ноль, оба равны)

Теперь, перейдя к вашему методу compareTo, он должен быть таким: -

     public int compareTo(Person per) {
            int i= firstName.compareTo(per.firstName);
            if(0!= i) return i;
            else
            return lastName.compareTo(per.lastName);
        }
person Amit Bhati    schedule 11.08.2015