我在我的地址簿程序中搜索我的条目时出现问题...我已经搜索过它们了...但是我在显示“未找到名称”时遇到问题。如果名称尚未保存在我的地址簿中,则会显示该消息。你能帮我弄清楚这有什么问题......
public void searchEntry() {
int notfound = 0;
SName = JOptionPane.showInputDialog("Enter Name to find: ");
for (int i = 0; i < counter; i++) {
if (entry[i].getName().equals(SName)) {
JOptionPane.showMessageDialog(null, entry[i].getInfo2());
}else{
notfound++;
}
if (notfound != 0){
JOptionPane.showMessageDialog(null, "Name Not Found!");
}
}
}
你能帮我看一下“名字未找到”msg ... thnx提前
答案 0 :(得分:3)
移动这个:
if (notfound != 0){
JOptionPane.showMessageDialog(null, "Name Not Found!");
}
在你的for循环之外。
我也刚刚意识到你可能会为每一个人出现这个,因为即使没有找到它,你也会触发它。尝试这样的事情:
SName = JOptionPane.showInputDialog("Enter Name to find: ");
boolean found = false;
Object info;
for (int i = 0; i < counter; i++) {
if (entry[i].getName().equals(SName)) {
found = true;
info = entry[i].getInfo2();
break;
}
}
if (found){
JOptionPane.showMessageDialog(null, info);
}else{
JOptionPane.showMessageDialog(null, "Name Not Found!");
}
答案 1 :(得分:1)
public void searchEntry() {
boolean isFind = false;
SName = JOptionPane.showInputDialog("Enter Name to find: ");
for (int i = 0; i < counter; i++) {
if (SName.equals(entry[i].getName())) {
JOptionPane.showMessageDialog(null, entry[i].getInfo2());
isFind = true;
break; // TODO: I think if you find name you should leave loop.
}
}
if (isFind){
JOptionPane.showMessageDialog(null, "Name Not Found!");
}
}
答案 2 :(得分:1)
你的逻辑存在很大缺陷。看起来你想迭代一些人的集合,做一个名字比较,当你找到一个人时,你想要一个带有字符串X的消息,当你找不到任何消息时,你想要一个带字符串Y的消息。这就是说,您可能希望将消息处理放在循环外部并使用String来存储找到的名称并将其用于条件化程序。这是一个例子:
String nameFound = null;
for (int i = 0; i < counter; i++) {
if (entry[i].getName().equals(SName)) {
nameFound = entry[i].getInfo2();
break; // Stop looking since you found the person
}
}
if (nameFound != null){
JOptionPane.showMessageDialog(null, nameFound);
} else {
JOptionPane.showMessageDialog(null, "Name Not Found!");
}