我对Java和编码一般来说是新手。我正在尝试更新信息,但每次更新不止一次,它就会重复以前的更新,例如如果更新了帐户3,然后又更新了帐户4,则它将正常更新4,将3更新为空白。我该如何做,使其仅更新我想要的内容?
$a = get-content C:\a.txt
$b = get-content C:\b.txt
If($a[0] -ne $b[0]) {
"Line number 1:Hello is not matching" | Out-Host
}
If($a[1] -ne $b[1]) {
"Line number 2:World is not matching" | Out-Host
}
If($a[2] -ne $b[2]) {
"Line number 3:Environment is not matching" | Out-Host
}
If($a[3] -ne $b[3]) {
"Line number 4:Available is not matching" | Out-Host
}
答案 0 :(得分:1)
欢迎来到SO。我怀疑您的问题是您使用的是addActionListener
,因此每次运行代码时,都会添加另一个侦听器。单击该按钮时,您添加的所有以前的命令也将运行。
更好的做法是添加一个侦听器,该侦听器引用上次选择的帐户:
private class AccountUpdater implements ActionListener {
private Account account;
public void setAccount(Account account) {
this.account = account;
tf_updateDOB.setText(account.getAccountDOB());
tf_updatePlan.setText(account.getAccountPlan());
tf_updateCard.setText(account.getAccountCard());
tf_updateName.setText(account.getAccountName());
}
@Override
public void actionPerformed(ActionEvent f) {
account.setAccountDOB(tf_updateDOB.getText());
account.setAccountCard(tf_updateCard.getText());
account.setAccountPlan(tf_updatePlan.getText());
account.setAccountName(tf_updateName.getText());
menuScreen.setVisible(true);
updateScreen.setVisible(false);
}
}
AccountUpdater updater = new AccountUpdater();
updateSubmitBtn.addActionListener(updater);
然后在选项对话框中的代码中,只需执行以下操作:
if (id.equals("1")) {
updater.setAccount(account1);
} else if (id.equals("2")) {
updater.setAccount(account2);
} ...
这还将使您的代码更容易阅读,重复次数更少。
更好的情况是,如果帐户具有id字段:
List<Account> accounts = ...;
accounts.stream()
.filter(ac -> ac.getId().equals(id))
.findAny().ifPresent(updater::setAccount);
那么您就不需要if
,else if
语句(通常这是不良设计的标志)。