繁体   English   中英

将公历日期添加到数组中并检索要在字符串中打印的日期

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

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

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




    }

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

为什么不使用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);          

您的getTransDate()函数做什么? 理想情况下,它应该返回CreditCard对象的transDate变量。 要计算购买的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" 
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM