我有一个多态数组,存储从用户处获取的条目。当用户输入完有效选项后,他们会 system.out.print 数组以显示存储的详细信息。但这些细节最终都成为数组中重复的最后一个条目。
public static void main(String args[]) {
System.out.println("\nWelcome to AIB Bank");
System.out.println("___________________________");
for(i = 0;i<5;i++){
OverDraft = false;
//prompt user for inputs and validate entries
System.out.println("\nUser " + (i+1));
System.out.print("Please enter name: ");
name = input.next();
System.out.print("\nPlease Enter Age: ");
strAge = input.next();
Age = Validate(strAge, 1, null);
System.out.print("\nPlease Enter Salary: ");
strSalary = input.next();
Salary = Validate(strSalary, 2, null);
System.out.print("\nPlease Enter Account Number: ");
strAccNum = input.next();
AccNum = Validate(strAccNum, 3, null);
System.out.print("\nPlease Enter Balance: ");
strBalance = input.next();
Balance = Validate(strBalance, 4, null);
System.out.print("\nIs This Person A Premium Customer(y/n): ");
strodCheck = input.next();
ODCheck = Validate(null, 5, strodCheck);
if(ODCheck == 0){
OverDraft = false;
}//end if for overdraft
else{
OverDraft = true;
}//end else for overdraft
if(OverDraft == true){
System.out.print("\nPlease Enter OverDraft Limit: ");
strODLimit = input.next();
ODLimit = Validate(strODLimit, 6, null);
}//end if for ODLimit
AccNums[i] = AccNum;
if(OverDraft == true){
PersonalDetails p1 = new PersonalDetails(name, Age);
CustomerArray[i] = new PremiumCustomer(Salary, AccNum, Balance, OverDraft, ODLimit, p1);
}
else{
PersonalDetails p1 = new PersonalDetails(name, Age);
CustomerArray[i] = new Customer(Salary, AccNum, Balance, p1);
}
System.out.println(CustomerArray[i].toString());
}//end for loop
for(i=0;i<5;i++){
System.out.println("\n" + i + "\n" + AccNums[i]);
System.out.println(CustomerArray[i]);
}
login();
}//end main method
AccNum 数组工作正常并显示正确的信息。
最佳答案
您的代码看起来像您的Age
、Salary
等变量都存储为对数组中相同变量的引用,因此for循环的每次迭代实际上访问相同的引用,因此最后数组中有五个条目,它们指向内存中的相同值,更改其中一项实际上会更改所有条目。尝试创建作用域为 for 循环的局部变量来填充数组。
关于java - 多态数组在接收条目后覆盖条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22247733/