我是JAVA的新手,我正在努力解决一个我无法找到答案的具体问题,所以我决定向StackOverflow的好人询问。
我正在尝试建立一个ATM程序。我已经创建了一个对象数组(银行的客户端),其中包含诸如cardnumber,pin,balance等属性。当任何用户尝试并且"登录"他应该在自动取款机上输入他的卡号。
在下面的代码中,我尝试模拟通过客户端阵列的ATM并使用每个客户的所有现有卡号检查输入的数字,直到找到匹配为止,并且它工作正常。问题是,如果它找到与位置10的客户匹配,它将显示"不存在的卡"成功前10次。
所以我想问一下程序是否有办法忽略所有这些不匹配,只有在找到匹配时才会继续。给我一张“不存在的卡片”#34;只有当它找到0匹配时。
for (i = 0; i < clients.length; i++) {
if (input.equals(clients[i].accountnumber)) {
System.out.println("Welcome");
} else {
System.out.println("Inexistent Card");
}
}
答案 0 :(得分:2)
考虑使用found
布尔变量
boolean found = false;
for (i = 0; i < clients.length; i++) {
if (input.equals(clients[i].accountnumber)) {
System.out.println("Welcome");
found = true;
break;
}
}
然后循环
if (!found) {
System.out.println("Inexistent Card");
}
答案 1 :(得分:1)
这正是你所写的!
考虑一下:在您搜索完所有帐户但未找到所需帐户之前,您不知道该帐户不存在。您需要以相同的方式组织代码。仅仅因为clients[0]
不是你要找的那个,clients[1]
可能是,所以你不能说“不存在”......
答案 2 :(得分:0)
实现这一目标的最简单方法:
int indexOfMatchingCard = -1;
for (... {
if (match) {
indexOfMatchingCard = current index
之后,您可以检查indexOfMatchingCard是否>> 0;同时它告诉你哪些卡匹配。如果您以后发现其他卡片不匹配,请确保不重置该标记!
如果您不需要记住匹配的索引;您可以使用一个简单的布尔标记(初始化为false一次;在匹配时更改为true)。