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 に答える