如何使用归类键创建类的对象?

问题描述 投票:0回答:1
public class zad9_1 {
    public static void main(String[] args) {
        User u=new User("James","Williams",15,"james123","123456");
        System.out.println(u.toString());
    }
}

class Person implements Comparable<Person>{
    private String firstName;
    private String lastName;
    private static final Collator collator=Collator.getInstance(Locale.getDefault());
    private final CollationKey sortLastNameKey;
    private final CollationKey sortFirstNameKey;
    private int age;
    public Person(String firstName,String lastName,int age) {
        if(firstName==null || lastName==null)
            throw new NullPointerException();
        this.firstName=firstName;
        this.lastName=lastName;
        this.age=age;
        sortLastNameKey=collator.getCollationKey(lastName+firstName);
        sortFirstNameKey=collator.getCollationKey(firstName+lastName);
    }
    public CollationKey getFirstNameKey() {
        return sortFirstNameKey;
    }
    public CollationKey getLastNameKey() {
        return sortLastNameKey;
    }
    public int getAge() {
        return this.age;
    }
    public int compareTo(Person p) {
        if(this.getAge()<p.getAge())
            return -1;
        else if(this.getAge()==p.getAge())
            return 0;
        else 
            return 1;
    }
    public String toString(){
        return firstName+" "+lastName+" "+age;
    }
}

class LastNameComparator implements Comparator{
    public int compare(Object person,Object other) {
        return ((Person)person).getLastNameKey().compareTo(((Person)other).getLastNameKey());
    }
}

class FirstNameComparator implements Comparator{
    public int compare(Object person,Object other) {
        return ((Person)person).getFirstNameKey().compareTo(((Person)other).getFirstNameKey());
    }
}

class User extends Person implements Comparable<Person>{
    private String username;
    private String password;
    public User(String firstName,String lastName,int age,String username,String password) {
        super(firstName,lastName,age);
        this.username=username;
        this.password=password;
    }
    public String getUsername() {
        return this.username;
    }
    public String getPassword() {
        return this.password;
    }
    public void setUsername(String username) {
        this.username=username;
    }
    public void setPassword(String password) {
        this.password=password;
    }
    public boolean equals(Object obj) {
        if(!(obj instanceof User))
            return false;
        User u=(User)obj;
        return this.getUsername().equals(u.getUsername())
                && this.getPassword().equals(u.getPassword())
                && this.getAge()==u.getAge();
    }
    public String toString() {
        return username+" "+this.getFirstNameKey()+" "+this.getLastNameKey()+" "+this.getAge();
    }
    public int compareTo(User u) {
        if(this.getUsername().compareTo(u.getUsername())<0 
                && this.getPassword().compareTo(u.getPassword())<0
                && this.getAge()-u.getAge()<0)
            return -1;
        else if(this.getUsername().compareTo(u.getUsername())==0 
                && this.getPassword().compareTo(u.getPassword())==0
                && this.getAge()-u.getAge()==0)
            return 0;
        else 
            return 1;
    }
}

class UsersGroup{
    private String groupName;
    private List<User>users;
    public UsersGroup() {}
    public UsersGroup(String groupName) {
        this.groupName=groupName;
    }
    public void addUser(User u) {
        users.add(u);
    }
    public void sortByLastName() {
        Collections.sort(users,new LastNameComparator());
    }
    public void sortByFirstName() {
        Collections.sort(users,new FirstNameComparator());
    }
    public void sortByUserPass() {
        Collections.sort(users);
    }
}

我试图首先在User类的主函数中创建对象,然后创建Users列表,最后使用该列表创建UsersGroup类的对象并测试其排序功能。在我的任务中,我应该使用这些排序规则和排序规则键,但实际上我发现它们真的很难理解。在我的代码中,您将看到在主要功能中,我试图创建User类的对象,但是当我打印它时,它显示了奇怪的输出。我敢肯定这是由于排序规则和排序规则键所致,如果有人可以向我展示正确的操作方法,我将不胜感激!这是输出:james123 java.text.RuleBasedCollat​​ionKey@dec40ca java.text.RuleBasedCollat​​ionKey@109a432e 15

java class sorting collation collator
1个回答
0
投票

按给定的方式修改User类中的toString()方法:

public String toString() {
    return username+" "+this.getFirstNameKey().getSourceString()+" "+this.getLastNameKey().getSourceString()+" "+this.getAge();
}

您直接在toString中使用Collat​​ionKey对象(这就是为什么它打印RuleBasedCollat​​ionKey @ hex_hashcode,即className @ HEX_hashcode的原因,而应该使用其getSourceString方法。

也不需要调用u.toString(),在您的情况下,您可以在主要方法中直接使用System.out.println(u);

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.