0

我正在编写一个信用卡程序。我希望程序每次使用该方法进行购买时都使用当前日期并将日期放入数组中

private GregorianCalendar transDate;

public CreditCard(double amount,String storeName, GregorianCalendar transDate) {
    this.amount=amount;
    this.storeName=storeName;
    transDate=new GregorianCalendar();
}

public void purchase(double amount, String storeName, GregorianCalendar date)throws Exception
{
    if (numPurchases<purchases.length)
        if (amount >0 )
            if(amount+balance<=creditLimit)
                if( GregorianCalendar.getInstance().getTimeInMillis()<=expDate.getTimeInMillis())
                    {
                     balance+=amount;
                     transDate=getTransDate();
                     purchases[numPurchases] = new CreditCard(amount, storeName,transDate);
                     numPurchases++;

                  }
                else
                {
                    throw new Exception("card expired");
                }
            else{
                throw new Exception("insufficient credit");
                }
        else{
            throw new Exception("invalid amount");

        }
    else{
        throw new Exception("exceeded number of allowed purchases");
    }


}

我想在字符串信息中显示信息

info+="Purchases:\n";
    for(int index=0;index<numPurchases;index++){
        info+="["+(index+1)+"] ";
        info+=transDate.get(Calendar.YEAR)+"\t";
        info+= purchases[index].getStoreName()+"\t";
        info+=(formatter.format(purchases[index].getPurchase()))+"\n" ;




    }

如何设置代码以使用当前日期并将其添加到数组中并在字符串中显示

4

2 回答 2

0

为什么不使用List实现而不是数组?您可以覆盖该toString方法以按照您想要的方式打印它。

final SimpleDateFormat formatter = new SimpleDateFormat("dd MM yyyy");         

List<Calendar> dates = new ArrayList<Calendar>() {                     

    private static final long serialVersionUID = -5079502477457556887L;

    @Override                                                          
    public String toString() {                                         
        Iterator<Calendar> i = iterator();                             

        if (!i.hasNext())                                              
            return "[]";                                               

        StringBuilder sb = new StringBuilder();                        

        sb.append('[');                                                
        for (;;) {                                                     
            Calendar c = i.next();                                     
            sb.append(formatter.format(c.getTime()));                  
            if (! i.hasNext())                                         
            return sb.append(']').toString();                          
            sb.append(", ");                                           
        }                                                              
    }                                                                  
};                                                                     

dates.add(Calendar.getInstance());                                     
dates.add(Calendar.getInstance());                                     

System.out.println(dates);          
于 2011-03-10T17:31:47.733 回答
0

你的getTransDate()功能是做什么的?理想情况下,它应该返回对象的transDate变量CreditCard。要计算transDate购买,您最好将方法重命名为calculateTransDate()或类似的名称。

一旦你有getTransDate()方法返回 transDate,你的info字符串可以是:

info+="Purchases:\n";
    for(int index=0;index<numPurchases;index++){
        info+="["+(index+1)+"] ";
        info+=purchases[index].getTransDate().get(Calendar.YEAR)+"\t";
        info+= purchases[index].getStoreName()+"\t";
        info+=(formatter.format(purchases[index].getPurchase()))+"\n" 
    }
于 2011-03-11T04:34:28.583 回答