Javadoc 注释 - CompareTo?

Javadoc comments - CompareTo?

我的书要求我为一段代码写一个Javadoc注释。在大多数情况下,我了解如何编写 javadoc,但我不了解该程序在做什么。

"Write a Javadoc comment for the following method of a class Person. Assume that class Person has two String data fields lastName and firstName with the obvious meaning. Provide preconditions and postconditions if needed."

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

首先你的 compareTo 方法看起来不适合我:- Public 应该是 public.

其次,您的方法是根据字典顺序的 firstName 或 lastName 比较两个 Person 对象,即字母顺序(A 在 B 之前或 A

例如:-

     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(负整数,first 小于 second)
If firstName1 > firstName2 then 1 (正整数, first 大于 second)
如果 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);
        }

确定不是这个样子?

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

}

此代码将根据名字的字典顺序进行排序,如果它们相同,则将对姓氏进行排序。

每个 compareTo 方法 returns 一个 -1、0 或 1,具体取决于第一个字符串在排序中是否先出现。

"Lexographically" 表示如果按其(左对齐或右对齐)字符的 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()));

现在让我们把它移开:这是句法无效的代码。有效代码如下所示:

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 声明。
  • 因为这个方法returns一个值,你需要有一个@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);
    }
}

/** 之后的部分是放置具体实施信息的地方;对使用此方法的人有用的东西。考虑到此方法不检查 any 名字或姓氏是否为 null,将其包含在此处很有价值。剩下的我留作 reader.

的练习

您的书本应该在某个时候解释什么是 Comparable。 Java 中的比较是通过从 compareTo() 方法返回一个整数(表示小于、大于或等于传入的值)来完成的。您发布的方法是根据名字和姓氏比较 Person。如果他们的姓氏相同,则使用他们的名字进行比较。否则,将使用他们的姓氏。

这将订购一组 People,如下所示:

Doe, John
Obama, Barack
Smith, John
Smith, Sally