2015-08-11 3 views
2

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

«Напишите комментарий Javadoc для следующего метода класса Person. Предположим, что класс Person имеет два строковых поля данных 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

+1

'Я действительно понятия не имею, что это такое doing' ... ну что я могу сказать, что компилирование одна вещь, это _выключена_ делает. В Java нет ключевого слова «Public». Просто Google Javadoc и посмотрите учебник. –

+0

Вот что задает вопрос, действительно странный. Он говорит, что общественность не является публичной. – beginningprogrammer

+0

Похоже, вам не хватает инструкции 'if'. Без этого я не могу сказать, что он делает. Сказав это, этот 'compareTo' использует другой' compareTo', который определен для объектов String, и вы можете узнать, что это значит, посмотрев документацию [здесь] (http://docs.oracle.com /javase/8/docs/api/java/lang/String.html). – ajb

ответ

2

Вы уверены, что это не выглядит так?

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 в зависимости от того, произойдет ли первая строка раньше в заказе или нет.

+0

Да, ты «Правильно, я забыл добавить инструкцию if. Спасибо, это начинает иметь смысл. Так что же это делает? Сравнивая set firstName с Per.firstName и видя, совпадают ли они? Если они возвращаются -1? Я все еще немного потерял – beginningprogrammer

+0

@beginningprogrammer, это проверяет имя. Если они одинаковы, то он проверяет второе имя. Например, имена называются Энди и Барб. Andy.compareTo («Barb») возвращает -1, так как a приходит до B. Barb.comparTo («Andy») возвращает 1, так как B больше, чем лексиграфически. Если они одинаковые, Andy.compareTo («Andy») вернет 0. – Pumphouse

+0

@beginningprogrammer, если они одинаковые, то они могут иметь одно и то же имя, поэтому оно относится к фамилии и делает то же самое. Если это возвращает 0, это одно и то же имя и фамилия. – Pumphouse

1

Первый ваш метод CompareTo не выглядит подходящим для меня: - Общественность должна быть публичной.

Во-вторых, ваш метод сравнивает два объекта 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); 
     } 
1

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

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

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

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

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 или нет, это было бы полезно включить сюда. Остальное я оставляю в качестве упражнения для читателя.

1

В какой-то момент ваша книга должна была объяснить, что такое Comparable. Сравнения в Java выполняются путем возврата целочисленного значения (что означает меньшее, большее или равное переданному значению) из метода compareTo(). Метод, который вы опубликовали, сравнивает Person на основе их имени и фамилии. Если их фамилии равны, их первые имена используются для сравнения. В противном случае используются их последние имена.

Это прикажет группу People так:

Doe, John 
Obama, Barack 
Smith, John 
Smith, Sally 
Смежные вопросы