正在匹配链表中的元素



基本上,我在链表中搜索用户之间的匹配元素。它基本上是一种约会类型的服务。用户单击搜索按钮,代码就会运行,它会编译匹配项并将其打印到文本字段中。

帐户类别链接:http://pastebin.com/jnBrcnP1

以下是链接列表的样子:

tobi
tobi123
tobi@hotmail.com
tobi
Mixed Breed
Male
1-2
Virginia
Walking
peppy
peppy123
peppy@hotmail.com
peppy
Chihuahua
Male
5-6
Virginia
Eating

这是我的按钮代码:

private void jButtonS1ActionPerformed(java.awt.event.ActionEvent evt) {
    LinkedList<Account> account = new LinkedList<Account>();
    String username = jTextFieldS1.getText();
    if(username.equals("")) // If password and username is empty > Do this >>>
    {
        jButtonS1.setEnabled(false);
        jTextFieldS1.setText("");
        jButtonS1.setEnabled(true);
        this.setVisible(true);
    }
    else
    {
        for(Account acc : account)
        {
            if(acc.getUsername().equals(username)){
                acc.goToNext();
                acc.goToNext();
                acc.goToNext();
                acc.goToNext();
                String breed = acc.getDataAtCurrent();
                acc.goToNext();
                String gender = acc.getDataAtCurrent();
                acc.goToNext();
                acc.goToNext();
                String state = acc.getDataAtCurrent();
                if(acc.getUsername().equals(username)== false && acc.getBreed().equals(breed) && acc.getGender().equals(gender)== false && acc.getState().equals(state)){
                    String match = acc.getUsername();
                    jTextAreaS1.setText("User: " + match + "is a 90% match!");
                }
                if(acc.getUsername().equals(username)== false && acc.getBreed().equals(breed) && acc.getGender().equals(gender)== false){
                    String match = acc.getUsername();
                    jTextAreaS1.setText("User: " + match + "is a 70% match!");
                }
                if(acc.getUsername().equals(username)== false && acc.getBreed().equals(breed) && acc.getState().equals(state)){
                    String match = acc.getUsername();
                    jTextAreaS1.setText("User: " + match + "is a 70% match!");
                }
                if(acc.getUsername().equals(username)== false && acc.getState().equals(state) && acc.getGender().equals(gender)== false){
                    String match = acc.getUsername();
                    jTextAreaS1.setText("User: " + match + "is a 70% match!");
                }
                if(acc.getUsername().equals(username)== false && acc.getBreed().equals(breed)){
                    String match = acc.getUsername();
                    jTextAreaS1.setText("User: " + match + "is a 50% match!");
                }
                if(acc.getUsername().equals(username)== false && acc.getGender().equals(gender)== false){
                    String match = acc.getUsername();
                    jTextAreaS1.setText("User: " + match + "is a 50% match!");
                }
                if(acc.getUsername().equals(username)== false && acc.getState().equals(state)){
                    String match = acc.getUsername();
                    jTextAreaS1.setText("User: " + match + "is a 50% match!");
                }
            }
        }
        try
        {
            read(account, "doggydates.txt");
        } catch (Exception e)
        {
            System.err.println(e.toString());
        }
    }
}

1)您需要做的第一件事是创建一个具有不同属性的类(比如Account),如"名字"、"姓氏"、"用户名"、"里德"等。

2) 每当你从用户那里收集详细信息时,创建一个Account类的对象并存储所有属性(可以是你可以对所有属性使用参数化构造函数)。

例如:Account acc=new Account(FirstName,Age,Sex,Breed...);

3) 将这些存储在集合中,稍后使用,这样您就可以简单地执行getBreed()getAge()

4) 最后但并非最不重要的是,休息一下,理清思路,设计你计划实施的内容,然后,启动系统。

这里有几件事,首先这不是一个问题,你正在陈述你的程序,仅此而已,但扫描你的代码,你会遇到不止一个问题。

你的第一个问题是设计,显然你有一个名为account的实体,它可以有名字、用户名、电子邮件地址、品种、性别和你想要的任何东西。你必须为它创建一个类(如果你想遵循OOP),或者如果你想跳过OOP,只需要创建一个结构。您正在使用Java,所以我认为您应该使用OOP解决方案。这会让你的生活更轻松。

public class account {
    private String name, user_name, email, .... ;
    // constructor
    // getters and setters
}

现在你可能想创建另一个类,它是一个帐户列表。此类将处理作为对象从列表中获取帐户的问题。例如,您可能有一个名为getNextAccount的方法,它将遍历列表并获取字符串并创建一个帐户对象。

例如:

Account getNextAccount() {
    // seek to the starting position of this account
    String name = acc.goToNext();
    String username = acc.goToNext();
    ....
    return new Account(name, username, ...);
}

您的代码:

LinkedList<Account> account = new LinkedList<Account>();

不正确。根据您的链接列表,列表的9个节点将创建一个帐户对象,这表明该列表应该是字符串列表,而不是帐户列表。所以你的链接列表应该是:

LinkedList<String> accountsList = new LinkedList<String>();

现在转向您的逻辑,我相信您希望基于不同的标准创建某种匹配百分比。如果第一个If条件为true,则匹配百分比为90%。但问题是,假设第一个if条件为true,因此匹配百分比应为90%,但问题是无论状态值是多少,第二个if条件也将为true,因为您使用的是if而不是if else语句。这会让用户感到困惑,想象一下你的程序显示的是:

User: <user_name> is a 90% match!
User: <user_name> is a 70% match!

这是令人困惑的,所以您希望使用if else语句。

此外,您可能希望创建一个处理文本区域打印的方法。所以,改变你的设计,试着遵循OOP原则,Java是一种OOP语言,修复你的逻辑,你就会运行你的日期匹配程序。

相关内容

  • 没有找到相关文章

最新更新