嗨,我有一个包含银行数据的数组类: 帐号,余额,帐户类型和状态。 该数组是使用构造函数构建的:
Bank.accounts.add(new Account(this.accNumber, this.type, this.balance, this.status));
当我尝试(使用另一种方法)查找数字时,找不到它。
该方法获取银行帐号帐户的输入,然后将其与帐户数组列表进行比较。如果找到,将打开一个控制台界面,但是它永远找不到帐号。 我尝试了扫描程序整数,将字符串转换为整数,并从方法内部或作为独立方法(如下面的示例)使用contains方法,但均未成功。
方法是:
public void accountActions() {
System.out.println("Enter number of account for more info");
Boolean isFinished = false;
while (!isFinished) {
try {
String scan = input.nextLine();
Bank.number = Integer.parseInt(scan);
isFinished = true;
} catch (NumberFormatException e) {
System.out.println("Please enter again\n------------------------------");
isFinished = false;
} catch (InputMismatchException e) {
System.out.println("Please enter again\n------------------------------");
isFinished = false;
}
}
if (checkAccountNumber(number) == true) {
System.out.println("=====================================");
System.out.println("= =");
System.out.println("= Enter command number =");
System.out.println("= =");
System.out.println("= 1. Withdraw money =");
System.out.println("= 2. Deposit =");
System.out.println("= 3. Total money in all accounts =");
System.out.println("= =");
System.out.println("=====================================");
} else {
System.out.println(
"No account was found by that number, would you like to try again?\n(((Yes/No)))\n---------------");
yesNo("accountActions");
}
}
独立方法是:
public boolean checkAccountNumber(int a) {
boolean check = false;
if (Bank.accounts.contains(a)) {
check = true;
}
return check;
}
答案 0 :(得分:1)
您正在将一个帐户与一个帐户编号进行比较。代替此,您应该这样做。
public boolean checkAccountNumber(int a) {
for (Account account of Bank.accounts){
if (account.accNumber.equals(a)) {
return true;
}
}
return false;
}
答案 1 :(得分:0)
由于您传递的是int
对象中的Bank.accounts
,而List
是Account
对象中的Stream.anyMatch
,因此您的代码无法正常工作。
您可以使用Account
来检查是否存在anyMatch
具有传入的帐号。
anyMatch
相对于循环的主要优势在于,它短路,不会评估将在第一次匹配时返回的流的所有元素。
根据class Bank {
static List<Account> accounts;
...
}
public boolean checkAccountNumber(int a) {
return Bank.accounts.stream().anyMatch(acc -> acc.accNumber.equals(a));
}
的 Java doc :
如果没有必要,则可能无法评估所有元素的谓词 确定结果。
示例代码:
Raw
您可以通过使用Bank.accounts
类型不来避免此问题。将您的List<Account>
列表生成为datediff - case when
,这样您就可以在编译时捕获此类错误。