Соответствующие элементы в связанном списке - PullRequest
0 голосов
/ 14 марта 2012

В основном я ищу связанный список для сопоставления элементов между пользователями.Это в основном сервис типа знакомств.Пользователь нажимает кнопку поиска, и код запускается, он компилирует совпадения и распечатывает их в текстовое поле.

Ссылка на класс учетной записи: 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());
        }
    }
}

Ответы [ 2 ]

1 голос
/ 14 марта 2012

1) Первое, что вам нужно сделать, это создать класс (скажем, Account) с различными атрибутами, такими как «Имя», «Фамилия», «ИД пользователя», «Порода» и т. Д.

2) Всякий раз, когда вы собираете данные от пользователя, создайте объект класса Account и сохраните все атрибуты (возможно, вы можете использовать параметризованный конструктор со всеми атрибутами).

Например: Account acc=new Account(FirstName,Age,Sex,Breed...);

3) Сохраните их в коллекции и используйте позже, чтобы вы могли просто сделать getBreed() или getAge()

4) И последнее, но не менее важное: сделайте перерыв, очистите голову, спроектируйте то, что вы планируете реализовать, а затем попробуйте систему.

0 голосов
/ 17 марта 2012

Пара вещей здесь, во-первых, это не вопрос, вы заявляете о своей программе, и все, но при сканировании вашего кода возникает более одной проблемы.

Ваша первая проблема - дизайн, очевидно, у вас есть сущность, называемая учетной записью, которая может иметь имя, имя пользователя, адрес электронной почты, породу, пол и все, что вы хотите. Вам придется создать для него класс (если вы хотите следовать ООП) или просто структуру, если вы предпочитаете пропустить ООП. Вы используете Java, поэтому я считаю, что вы должны пойти с решением ООП. Это сделает вашу жизнь проще.

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 истинно, то процент совпадения составляет 90%. Но вот проблема, предположим, что первое условие if является истинным, поэтому процент соответствия должен быть равен 90%, но проблема в том, что второе условие if также будет истинным независимо от значения состояния, потому что вы используете if not if else заявление. Это может сбить пользователя с толку, представьте, что ваша программа отображает это:

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

Это сбивает с толку, поэтому вы хотите использовать if else операторов.

Также вы можете создать метод, который обрабатывает печать в текстовой области. Поэтому измените свой дизайн, попробуйте следовать принципам ООП, Java - это язык ООП, исправьте свою логику, и у вас будет запущена программа сопоставления дат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...