如何打印树集中的所有对象而不仅仅是最后一个?

时间:2014-05-02 03:21:45

标签: java

我创建了一个名为“ACCOUNT_OPTION”的类,这个类有很多客户数组(名称,国家ID等)和很多方法(撤销,存款,贷款......等) 在称为“银行”的平均类 我在pic中创建了一个新对象:

   public static void main(String[] args) {
    // TODO code application logic here

    int Selected  ;
    boolean again ;

    ACCOUNT_OPTIONS CUSTOMER = new ACCOUNT_OPTIONS ();

    do{ 
        try {
            Scanner input = new Scanner (System.in);
            do {
                again = true;
                System.out.println("=================================");
                System.out.println("====== Welcome To Our Bank =======");
                System.out.println("Choose Your Choices ...");
                System.out.println("1) Create A New Account ...");
                System.out.println("2) Check Balance Amuont ...");
                System.out.println("3) Deposit...");
                System.out.println("4) Withdraw...");
                System.out.println("5) Get a new loan ...");
                System.out.println("6) Pay for the monthly payment for an existing loan...");
                System.out.println("7) Check an existing loan status ...");
                System.out.println("8) Print A Summry For Your Account...");
                System.out.println("9) Exit");
                System.out.print("Enter your choice :  ");
                Selected = input.nextInt();
                System.out.println("=================================");

            switch(Selected) {
                case 1 : 
                    CUSTOMER.newaccount();
                    break;
                case 2: 
                    CUSTOMER.opaccountCheck();
                    break;
                case 3 :
                    CUSTOMER.opaccountDeposit();
                    break;
                case 4 :
                    CUSTOMER.opaccountWithdraw();
                    break;
                case 5 :
                    CUSTOMER.Loan();
                    break;
                case 6 :
                    CUSTOMER.LoanPay();
                    break;
                case 7 :
                    CUSTOMER.LoanCheck();
                    break;
                case 8 :
                    System.out.println(CUSTOMER);
                    break;
                case 9 : 
                    System.out.println(".....THANKS FOR VISITING.....");
                    System.out.println("---------------------");
                    break;
                default :
                    System.out.println(".....Invalid Choice.....");
                    System.out.println("---------------------");
                }
            }while(Selected!=9);
        }

        catch (Exception e){
            System.out.println(".....Error!!.....");
            System.out.println("Please Try Again");
            System.out.println("Please Enter Only Number");
            System.out.println("If You Want To Exit Press (9)");
            System.out.println("---------------------");
            again = false;
            }
    }while(!again);



    // here we store the accounts in TreeSet

    TreeSet<ACCOUNT_OPTIONS> Set = new TreeSet<>();
    Set.add(CUSTOMER);

    Iterator <ACCOUNT_OPTIONS> T = Set.iterator();
    System.out.println("\n"+"Tree set data: ");
    while (T.hasNext()){
    System.out.println(T.next());
   }
    }
}

每件事都没问题,当我想要打印Treeset时,它只打印最后创建的帐户但是,我希望它能打印所有帐户我能做什么:(

1 个答案:

答案 0 :(得分:0)

这是因为您只向TreeSet添加了一个对象。

就目前而言,您在循环之前实例化CUSTOMER对象,然后在循环的每次迭代中覆盖它,而不必将其添加到您的集合中。请注意,当您在循环后实例化TreeSet时,您只需调用add( ) 一次,因此您只需添加一个 object,它是循环的最后一次迭代创建的CUSTOMER对象。

试试这个:

//BEFORE the loop
AccountOptions customer; 
TreeSet<AccountOptions> accountOptionsSet= new TreeSet<>();
do { 
    //INSIDE the loop 
    customer = new Account_Options() 
    ... rest of loop / instance-creation logic  
    accountOptionsSet.add(customer); //store the object before it gets overridden by the next. 
    ... 
 } while(!again);

 //AFTER the loop 
System.out.println("\n"+"Tree set data: ");

Iterator <AccountOptions> accountOptionsIterator = accountOptionsSet.iterator();
while (accountOptionsIterator.hasNext()){
    System.out.println(accountOptionsIterator.next());
}

(请注意,我对您的语法进行了一些更改,以符合Java naming conventionsmeaningful-names最佳做法。虽然没有必要让您的代码有效,但您应该真正了解并遵循这些。 ,我建议的那些可能适合你的特定用例,也可能不适合你 - 我正在继续推断你发布的内容。事实上,我所做的一些改变仍然很糟糕 - 例如{ {1}}应该有一个在您的上下文中更有意义的名称。)

另外,在不知道你正在做什么的情况下,acctOptionsSet令人困惑。问问自己:为什么没有一个AccountOptions customer类,其中Customer类的字段名为options,或者AccountOptions字段的Customer类,有一个Account字段?

当你正在学习编程时,你可能会想到制作难以理解的东西会让它变得聪明 - 它不会Occam's razor可能比编程更具适用性。