Java日计数器的折扣

时间:2015-09-03 22:17:02

标签: java

我正在编写一张允许您支付公交车票的卡,它可以为您当天支付的前两张票中的学生提供特别折扣#34;(80%的折扣)。 我放置了一个变量来计算你旅行的次数然后根据你没有超过你被授予的2个折扣来折扣,但是我无法找到一种方法让变量值在一天时变回0已经过去了。我必须指定我将使用的代码是对象TravelCard的扩展(继承),并且有几个变量priceXtravelbalance从哪个继承而来。

public class StudentTravelCard {
    private double discount;
    private int discountCounter;
    public StudentTravelCard(int cardiD){
        super(cardiD);
        discount = 0.8;
    }
    public void newTravel() {
        if(discountCounter < 2) {
            super.newTravel();
            balance += (priceXtravel*discount);
            discountCounter ++;
        }
        else {
            super.newTravel;
            //discountCounter = 0;?  what if they continue to travel on that day?
        }
    }
}

2 个答案:

答案 0 :(得分:1)

在您的模型中,没有日期或时间信息。如果您想拥有一个取决于时间(“一天”)的行为,您将必须存储此信息,以便计算第一次旅行和新旅行之间的经过时间

实施将取决于您的要求:

  • 折扣适用于00:00:00至23:59:59当天的2次旅行?
  • 或从第一次旅行开始24小时内享受折扣?

无论如何,逻辑是在第一次调用Date时存储CalendarnewTravel()实例,然后将此日期与后续调用的当前日期进行比较。

  • 如果日期是在同一天
    • 如果discountCount < 2,则应用折扣
    • 其他应用全价
  • else(旅行与存储日期在不同的日期)使用当前日期重置存储日期。

等等......

答案 1 :(得分:0)

在你的newTravel()中你可以删除注释行并添加另一个方法resetDay()以在新的一天重置为0折扣。

当然,resetDay()必须由知道关于当前时间等的东西调用。

public class StudentTravelCard {
    private double discount;
    private int discountCounter;
    public StudentTravelCard(int cardiD){
        super(cardiD);
        discount = 0.8;
    }
    public void newTravel() {
        if(discountCounter < 2) {
            super.newTravel();
            balance += (priceXtravel*discount);
            discountCounter ++;
        }
        else {
            super.newTravel();
        }
    }

    public void resetDay() {
        discountCounter = 0;
    }
}