добавление дат григорианского календаря в массив и извлечение даты для печати в строке - PullRequest
0 голосов
/ 10 марта 2011

Я пишу программу для кредитных карт. Я хочу, чтобы программа использовала текущую дату каждый раз, когда метод используется для совершения покупки, и помещает дату в массив

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");
    }


}

Я бы хотел отобразить информацию в String info

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" ;




    }

как мне настроить код для использования текущей даты, добавить его в массив и отобразить в строке

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

Что делает ваша 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" 
    }
0 голосов
/ 10 марта 2011

Почему бы вам не использовать 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);          
...