在我的这个特殊情况下,无法理解树排序背后的逻辑



我有以下"人物"class——

import java.rmi.activation.ActivationGroup_Stub;
public class Person implements Comparable<Person> {
private int marks;
private String name;
Person(int marks, String name) {
this.marks = marks;
this.name = name;
}
public int getMarks() {
return marks;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Person: Marks = " + marks + ", Name =  " + name;
}
@Override
public int compareTo(Person person) {
int myReturn = 0;
if (marks > person.marks) {
myReturn = 1;
} else if (marks < person.marks) {
myReturn = -1;
} else {
int minLength = 0;
boolean equal = false;
if (name.length() < person.name.length()) {
minLength = name.length();
} else if (name.length() > person.name.length()) {
minLength = person.name.length();
} else {
minLength = name.length();
equal = true;
}

for (int i = 0; i < minLength; i++) {
if (i == minLength) {
if (equal) {
myReturn = 0;
break;
} else if (name.length() > minLength) {
myReturn = 1;
break;
} else {
myReturn = -1;
break;
}
} else if(name.charAt(i) > person.name.charAt(i)) {
myReturn = 1;
break;
} else if (name.charAt(i) < person.name.charAt(i)) {
myReturn = -1;
break;
} else {
continue;
}
}
}
return myReturn;
}
}

现在在main类中,我创建了TreeClass-

TreeSet<Person> treeSet1 = new TreeSet<>(List.of(
new Person(67, "Nusrat"),
new Person(67, "Nusrat"),
new Person(67, "Nupur"),
new Person(72, "Nupur"),
new Person(67, "Nupur"),
new Person(67, "Nipun"),
new Person( 67, "Nipuna"),
new Person(67, "Jhilam")
));

打印时输出为-

Person: Marks = 67, Name =  Jhilam
Person: Marks = 67, Name =  Nipun
Person: Marks = 67, Name =  Nupur
Person: Marks = 67, Name =  Nusrat
Person: Marks = 72, Name =  Nupur

一切正常,除了"one_answers";Nipuna"被认为是平等的。我哪里做错了?

我已经解决了我的问题,这是for循环中的逻辑错误-

正确的代码应该是-

for (int i = 1; i <= minLength; i++)

现在输出如预期-

Person: Marks = 67, Name =  Jasmine
Person: Marks = 67, Name =  Jhilam
Person: Marks = 67, Name =  Nipun
Person: Marks = 67, Name =  Nipuna
Person: Marks = 67, Name =  Nupur
Person: Marks = 67, Name =  Nusrat
Person: Marks = 72, Name =  Nupur

最新更新