解决方案是从Account类中的变量中删除静态。代码现在按预期工作
我正在尝试创建一个方法来检查数字是否在对象的arraylist中
我最初的想法是这个,但目前无效。我的主要课程是这个与相关的代码
private static ArrayList<Account> accounts = new ArrayList<Account>();
public static void main(String[] args)
{
//Creates the three default accounts
Account ac1 = new Account("account1", 0001, 0);
Account ac2 = new Account("account2", 0002, 0);
Account ac3 = new Account("account3", 0003, 0);
accounts.add(ac1);
accounts.add(ac2);
accounts.add(ac3);
}
public static void createAccount()
{
Boolean doesContain = false;
String logAccNum = JOptionPane.showInputDialog("please enter your account Number");
int tempAccNum = Integer.parseInt(logAccNum);
doesContain = checkArray(tempAccNum);
}
public static boolean checkArray(int checkNum)
{
for(int i = 0; i <accounts.size(); i++)
{
if(accounts.get(i).getMyAccountNum() == checkNum)
{
return true;
}
}
return false;
}
我的帐户类中没有不相关代码的代码是
private int myAccountNum;
private int myBalance;
private String myName;
public Account(String name, int accNum, int balance)
{
this.myName = name;
this.myAccountNum = accNum;
this.myBalance = balance;
}
public int getMyAccountNum()
{
return myAccountNum;
}
我的代码的当前问题是,如果在createAccount中输入的数字是最后创建的默认帐户,checkArray将仅返回true。我相信Account类中的myAccountNum变量在构造它的最后一个实例后保持不变。
最后,除非必要,否则我不想在解决方案中使用迭代器,如果你可以使用arrayList和for循环来创建它,那将非常感激
答案 0 :(得分:0)
属性myAccountNum
,myBalance
,myName
必须为非static
,因为这些属性意味着它们独立于类实例而存在。当你实例化新的Account
时,他们都会指代相同的变量,而不是拥有自己的变量。
您的代码说&#34;分享myAccountNum
,myBalance
,myName
&#34;在所有实例之间。这不是你的意图。
答案 1 :(得分:0)
原因是因为变量是静态的。https://beginnersbook.com/2013/05/static-variable/所有静态变量对于该类的所有对象具有相同的值