简体   繁体   English

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

[英]Unable to understand the logic behind treesorting in this particular case of mine

I have the following "Person" class -我有以下“人” 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;
    }
}

 

Now in main class I have made the TreeClass -现在在主要课程中,我制作了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")
        ));

Upon printing the output is -打印后的输出是 -

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

All is right except "Nipun" and "Nipuna" are considered as equal.一切都是正确的,除了“Nipun”和“Nipuna”被认为是平等的。 Where am I going wrong?我哪里错了?

I have solved my problem, it was a logical error in the for loops -我已经解决了我的问题,这是 for 循环中的一个逻辑错误 -

the correct code would be -正确的代码是 -

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

Now output as expected -现在按预期输出 -

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM