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

发布于 2025-02-01 04:20:19 字数 2768 浏览 3 评论 0原文

我有以下“人” 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;
    }
}

 

现在在主类中,我已经制作了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

一切都是正确的,除了“ nipun”和“ nipuna”被认为是平等的。我要去哪里?

I have the following "Person" 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 -

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. Where am I going wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月竹挽风 2025-02-08 04:20:19

我已经解决了我的问题,这是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

I have solved my problem, it was a logical error in the for loops -

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文