Глядя на свой код, вы делаете это:
Во-первых, LinkedList<Account> account = new LinkedList<Account>();
это означает, что вы создаете список каждый раз, когда пользователь нажимает кнопку Сохранить настройки .
Второе, ListIterator<Account> itr = account.listIterator();
, но аккаунт - это пустой список! Таким образом, вы не можете сравнивать какой-либо один объект с данными ваших людей.
И последнее, но не менее важное: read(account, "doggydates.txt");
Я полагаю, вы читаете данные файла и заполняете свой список после того, как все сравнения сделаны.
Реорганизуйте свой код и повторите попытку.
UPDATE:
Просмотрев весь ваш код, я обнаружил некоторые проблемы в вашем дизайне:
-
Account
класс - это ваша сущность. Этот класс должен иметь данные для вашего списка. Вы можете использовать этот класс как узел LinkedList, указав указатель на другую Account
ссылку на объект, не нужно использовать ListNode
экземпляр.
- Для реализации LinkedList вы используете класс
Account
. Но это внутри LinkedList<Account>
, поэтому у вас есть LinkedList из LinkedList. Я думаю, вы не хотите такого поведения.
Вы можете изменить свой дизайн на что-то более простое. Я дам вам 2 образца для вашего дизайна:
Форма 1. Использование класса Acount
в качестве узла LinkedList.
public class Account {
private Account next;
private Account previous;
private String username;
private String password;
private String email;
private String name;
private String breed;
private String gender;
private String age;
private String state;
private String hobby;
//constructor logic...
//getters and setters...
//toString method (for System.out.println)
}
public class AccountLinkedList {
private Account head;
private int size;
public AccountLinkedList() {
this.size = 0;
this.head = null;
}
public boolean insert(Account account) {
if (this.head == null) {
this.head = account;
} else {
Account current = head;
while (current.getNext() != null) {
current = current.getNext();
}
//maintain the LinkedList order
current.setNext(account);
account.setPrevious(current);
}
}
public Account findAccount(Account account) {
Account current = head;
while (current != null) {
if (current.equals(account) {
return current;
}
current = current.getNext();
}
return null;
}
//create the other methods to search, delete and traverse your list...
}
public class MyProgram {
public void jButtonP1ActionPerformed(java.awt.event.ActionEvent evt) {
Account account = new Account();
//set the account data, I'll just stick to username and
//password attributes
String username = jTextFieldP3.getText();
String password = jPasswordFieldP1.getText();
account.setUsername(username);
account.setPassword(password);
//perform the update
updateData();
}
public void updateData(Account account) {
AccountLinkedList accountList = new AccountLinkedList;
//loading data into our list
loadDataFromFile(accountList, "myFile.txt");
//perform the search operation
Account accountAux = accountList.findAccount(account);
//if the account is found, then update the accountAux data
if (accountAux != null) {
updateAccountData(accountAux, account);
} else {
accountList.insert(account);
}
//saving the modified data
saveDataToFile(accountList, "myFile.txt");
}
}
Форма 2. Используйте класс Account
как сущность и используйте реализацию Java LinkedList:
//check that now you don't have the next and previous attributes
public class Account {
private String username;
private String password;
private String email;
private String name;
private String breed;
private String gender;
private String age;
private String state;
private String hobby;
//constructor logic...
//getters and setters...
//toString method (for System.out.println)
}
public class MyProgram {
public void jButtonP1ActionPerformed(java.awt.event.ActionEvent evt) {
Account account = new Account();
//set the account data, I'll just stick to username and
//password attributes
String username = jTextFieldP3.getText();
String password = jPasswordFieldP1.getText();
account.setUsername(username);
account.setPassword(password);
//perform the update
updateData();
}
public void updateData(Account account) {
LinkedList<Account> accountList = new LinkedList<Account>();
//loading data into our list
loadDataFromFile(accountList, "myFile.txt");
//perform the search operation
ListIterator<Account> li = accountList.listIterator();
Account accountAux = null;
while(li.hasNext()) {
accountAux = li.next();
//matching the account data outside with the current account
//of the list iterator, this is just a sample, you can change
//this logic
if (accountAux.equals(account) {
updateAccountData(accountAux, account);
break;
}
accountAux = null;
}
//in case the account was not fount in the LinkedList, add it.
if (accountAux == null)
accountList.add(account);
//saving the modified data
saveDataToFile(accountList, "myFile.txt");
}
}
IMO, я буду придерживаться формы 2 вместо формы 1. Надеюсь, это поможет вам.