java - 多态数组在接收条目后覆盖条目

标签 java arrays polymorphism

我有一个多态数组,存储从用户处获取的条目。当用户输入完有效选项后,他们会 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 数组工作正常并显示正确的信息。

最佳答案

您的代码看起来像您的AgeSalary等变量都存储为对数组中相同变量的引用,因此for循环的每次迭代实际上访问相同的引用,因此最后数组中有五个条目,它们指向内存中的相同值,更改其中一项实际上会更改所有条目。尝试创建作用域为 for 循环的局部变量来填充数组。

关于java - 多态数组在接收条目后覆盖条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22247733/

相关文章:

java - 每次触发监听器时,我的监听器实现都会创建一个新数组,这是一个问题吗?

java - 数组打印怪异字符

java - 具有按升序排列的范围内的非重复数字的数组,java

arrays - 延迟循环数组 - Swift

c++ - 对象数组(基本情况)和派生类之间的动态转换

java - 在 Eclipse 中创建 Web 服务

java - 以 Java 6 为目标并使用 JDK 7 编译器时如何抑制引导类路径警告

java - 跳过命令行参数时出现 ArrayIndexOutOfBoundsException

c# - 从抽象父类调用泛型列表上的方法

c++ - 基类和派生类构造函数多态性问题