我似乎无法将我保存的帐户存储在ArrayList中。我认为最新的一个覆盖了最旧的一个,但我需要它们全部堆叠在ArrayList中。
当我运行程序时,我创建(添加到ArrayList)一个新帐户,比如Greg。然后我继续使用该帐户,稍后再添加另一个帐户,鲍勃说。然后我点击“搜索帐户”并输入Greg,它找不到它,但它找到了Bob。但是,如果我在创建Bob之前搜索Greg,它会发现它!
以下是我的代码的相关部分:
////////// DECLARATIONS /////////
public static ArrayList dataStore;
public static int index;
dataStore = new ArrayList(10);
index = 0;
/////////////////////////////// ADD NEW ACCOUNT ////////////////////////////////
else if(source.equals("Add new account")) {
//************* Output
accountName = JOptionPane.showInputDialog("Enter the account name: ");
account.setName(accountName);
String strInitialBalance = JOptionPane.showInputDialog("Enter your initial
balance: ");
initialBalance = Double.parseDouble(strInitialBalance);
account.setBalance(initialBalance);
account = new CheckingAccount(initialBalance, accountName);
dataStore.add(index++, account);
}
//////////////////////////////// FIND ACCOUNT /////////////////////////////////
else if(source.equals("Find an account")) {
String str, name;
str = JOptionPane.showInputDialog("Enter the Account name: ");
for (int index = 0; index < dataStore.size(); index++) {
Account datum = (Account)dataStore.get(index);
if (str.equals(datum.getName())) {
name = datum.getName();
textArea.setText("Found Account for " + name);
}
else
textArea.setText("No Accounts found!");
} // for
}
他们所指的这个“帐户”对象是我所有存储所有数据的类。这是它的标题:
public class CheckingAccount extends Account implements Serializable {
// ...
// Methods
// ...
}
答案 0 :(得分:2)
这是您原始的代码块。
for (int index = 0; index < dataStore.size(); index++) {
Account datum = (Account)dataStore.get(index);
if (str.equals(datum.getName())) {
name = datum.getName();
textArea.setText("Found Account for " + name);
}
else
textArea.setText("No Accounts found!");
}
我认为在for循环中使用else语句是有意义的,请尝试下面的代码......
boolean found = false;
for (int index = 0; index < dataStore.size(); index++) {
Account datum = (Account)dataStore.get(index);
if (str.equals(datum.getName())) {
name = datum.getName();
textArea.setText("Found Account for " + name);
found = true;
}
}
if(!found){
textArea.setText("No Accounts found!");
}
我认为您不希望else{}
中的for(...) loop
,因为当您浏览数据结构时,很多时候,您的初始if (str.equals(datum.getName()))
语句会失败,因为您没有找到了帐户。但是,如果您最终找到它,则会遇到if(...)
条件并通过textArea
告知用户您找到了该帐户。然后将boolean
设置为true,即可找到它。如果你通过整个数据结构并且没有找到它,那么布尔值仍将等于false,并且你将满足第二个条件,如果在for循环之后是if(!found)
,并告诉用户您已搜索整个数据结构但尚未找到该帐户。
另外,我认为你的第一个看起来应该更像下面的代码(我不知道CheckAccount的签名方法是什么样的,所以这有点是对实际语法的猜测)
else if(source.equals("Add new account")) {
//************* Output
//use constructor below if you have a default constructor aka no paramaters
CheckingAccount account = new CheckingAccount();
//now that you have object linked to account, you can use setters
accountName = JOptionPane.showInputDialog("Enter the account name: ");
//set the name
account.setName(accountName);
String strInitialBalance = JOptionPane.showInputDialog("Enter your initial
balance: ");
initialBalance = Double.parseDouble(strInitialBalance);
//set the balance
account.setBalance(initialBalance);
//dont make a new object now as you did before..just add the object to your arraylist
dataStore.add(index++, account);
}