开发者

adding Gregorian Calendar dates to an array and retrieving the date to print in a string

I am writing a credit card program. I want the program to use the current date every time the method is used to make a purchase and put the date into the array

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.g开发者_如何转开发etTimeInMillis())
                    {
                     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");
    }


}

I would like to display the information in 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" ;




    }

how do I need to set up the code to use the current date and add it to the array and display it in the string


Why don't you use a List implementation instead of an array? You can override the toString method to print it the way you want.

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


What does your getTransDate() function do? Ideally it should return the transDate variable of CreditCard object. To calculate transDate for a purchase, you are better off renaming the method to calculateTransDate() or something like that.

Once you have getTransDate() method returning the transDate, your info string can be :

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜