2012-05-10 77 views
1

我想在for循环中从一个类创建几个对象。但我不知道如何编码。我写的内容创建了一个新对象,但它覆盖了前一个对象。在Java for循环中创建几个新对象

package assginment1_version4; 

import java.util.*; 

public class Client { 

public static void main (String[] args) { 
    System.out.println ("this is a bill database"); 
    System.out.println ("add a user?(Y/N)"); 

    Scanner input = new Scanner(System.in); 
    String answer = input.nextLine(); 
    ArrayList ary = new ArrayList(); 

    for (int i=1 ; i < 100; i++) { 
     if (answer.equalsIgnoreCase("y")) { 
      Bill bill1 = new Bill(); 
      System.out.println("user first name:"); 
      bill1.setFname (input.nextLine()); 
      System.out.println("user Last name:"); 
      bill1.setLname (input.nextLine()); 
      System.out.println ("add a user?(Y/N)"); 
      answer = input.nextLine(); 
     } else if (answer.equalsIgnoreCase ("n")) { 
      if (Bill.getBillCounter() == 0) { 
       System.out.println ("the Database is empty"); 
       break; 
      } else { 
       System.out.println ("Number of Users: " 
         + Bill.getBillCounter()); 
       break; 
      } 
     } else { 
      while (!answer.equalsIgnoreCase ("n") 
        && !answer.equalsIgnoreCase ("y")) { 
       System.out.println ("add a user?(Y/N)"); 
       answer = input.nextLine(); 
       } 
      } 
     } 
    } 
} 

请帮我完成这段代码。

+1

你究竟想要做什么? –

+0

我想向这个数据库添加新的对象(bill2,bill3,...),但是我的代码将新对象写入到前一个对象中。我想将所有对象信息保留在我的数据库中。 – msc87

+0

@ msc87如果您将帮助解决问题的答案标记为已接受的答案(加上您获得2个业力),这很有帮助! – jbranchaud

回答

1

您还没有使用过ArrayList,您需要在for循环的末尾添加Bill's对象。

ary.add(bill1); 

,并添加一个类型ArrayList中

ArrayList<Bill> ary = new ArrayList<Bill>(); 
7

,因为你创建的每个循环新Bill,从不保存过的任何地方你覆盖它们。我相信你想将它们添加到您的ArrayList

首先,你要一个类型添加到您的ArrayList

ArrayList<Bill> ary = new ArrayList<Bill>(); 

然后,你会得到来自用户的输入之前就是否添加新Bill,你应该添加当前这份名单:

... 
System.out.println("user Last name:"); 
bill1.setLname(input.nextLine()); 
ary.add(bill1); 
... 
+0

做了你的建议,现在我可以保存新的对象,但有另一个问题....我无法检索对象的信息。例如; System.out.println(bill1.getFname(ary.get(index))) – msc87

+1

@ msc87改为使用'ary.get(index).getFname()'(尽管我无法确定没有看到Bill类信息。 –

+0

我在这里把比尔类和我没有你说什么,但它返回此错误:在线程异常“主要” java.lang.IndexOutOfBoundsException:指标:1,尺寸:1 \t在java.util.ArrayList.RangeCheck(未知源) \t at java.util.ArrayList.get(Unknown Source) \t at assginment1_version2.Client.main(Client.java:46) – msc87

0

这是比尔类.....

package assginment1_version2; 

public class Bill { 

/** 
* Attributes of a bill 
*/ 
private String firstName; 
private String lastName; 
private int paymentDeadline; 
private int paymentCode; 
private int billCode; 

/** 
* Attribute of Bill Class 
*/ 

     private static int BillCounter=0; 

/** 
* Methods of Bill class 
* @return number of users 
*/ 
/*public static int getBillCounter(){ 
    return BillCounter; 
}*/ 


/** 
* Class Constructor 
* @param Fname is the first name of user 
* @param Lname is the last name of user 
* @param Pdeadline is the deadline of paying the bill 
* @param Pcode introduces the payment uniquely 
* @param Bcode introduces the bill uniquely 
*/ 
    public Bill(){ 
     BillCounter++; 
    } 

/** 
* FirstName methods 
* method to set FirstName 
* @param n is the input of setname method as a user name 
*/ 
public void setFname (String n){ 
    firstName=n; 
} 
// method to get FirstName 
public String getFname(){ 
    return firstName; 
} 


/** 
* LastName methods 
* method to set LastName 
*/ 
public void setLname (String m){ 
    lastName=m; 
} 
// method to get LastName 
public String getLname(){ 
    return lastName; 
} 


/** 
* PaymentDeadline methods 
* method to set PaymentDeadline  
*/ 
public void setPaymentDeadline(int m){ 
    paymentDeadline= m; 
} 
//method to get PaymentDeadline 
public int getPaymentDeadline(){ 
    return paymentDeadline; 
} 

/* 
* PaymentCode methods 
* Method to set PaymentCode 
*/ 
public void setPaymentCode (int m){ 
    paymentCode=m; 
} 
//method to get PaymentCode 
public int getPaymentCode(){ 
    return paymentCode; 
} 

/* 
* Methods of BillCode 
* method to set BillCode 
*/ 
public void setBcode(int Bcode){ 
    billCode=Bcode; 
} 
//method to get BillCode 
public int getBcode(){ 
    return billCode; 
} 
}