链接列表中的匹配元素

时间:2012-03-14 07:27:25

标签: java linked-list

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

指向帐户类的链接: 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 个答案:

答案 0 :(得分:0)

这里有一些事情,首先这不是一个问题,你说的是你的程序就是这样,但是通过代码扫描你会遇到一个以上的问题。

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

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

现在您可能想要创建另一个类,即Account列表。该类将处理从列表中获取帐户作为对象。例如,您可能有一个名为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条件为真,则匹配百分比为90%。但这是问题,假设第一个if条件为真所以匹配百分比应为90%,但问题是第二个if条件也将为真,无论状态值是什么,因为你使用的是if不是if else声明。这会让用户感到困惑,想象一下您的程序会显示:

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

这很令人困惑,因此您希望使用if else语句。

您还可以创建一个处理文本区域打印的方法。因此,改变您的设计,尝试遵循OOP原则,Java是一种OOP语言并修复您的逻辑,您将运行日期匹配程序。