【问题标题】:What is the best way to structure a group of variables that have a group of variables that have a group of variables and so on? [closed]构造一组具有一组变量的一组变量的最佳方法是什么,等等? [关闭]
【发布时间】:2020-04-04 07:06:13
【问题描述】:

我正在创建一个计算费率的 Java 程序。费率有一个有高峰的季节,这些高峰有自己的时间和价格。我正在考虑做嵌套类,但必须有一种更好的方法,我只是没有考虑它吗?

我需要存储的变量:

Rate
    Summer
        peak
            hours
            price
        midpeak
            hours
            price
        off-peak
            hours
            price
    Non-summer
        peak
            hours
            price
        midpeak
            hours
            price
        off-peak
            hours
            price

【问题讨论】:

  • 欢迎来到 SO Alder !很好的问题,但不适用于这个网站。我认为这个问题的正确网站是softwareengineering.stackexchange.com
  • 创建对象并对其建模。为什么你认为嵌套类是答案?
  • @BoristheSpider 我认为嵌套类将是一种有组织的数据存储方式。我可以通过执行 Rate summer = new Rate();...summer.peak.rate = 1.12; 之类的操作来访问变量summer.peak.hours[] = {...}; ...如果我想设置夏季的中峰率:summer.midPeak.rate = 1.00;虽然 id 可能必须使用 getter 和 setter,但我想你明白了。我的另一个想法是使用多维数组,但访问变量根本不是描述性的。其中 rate[0][1] 是指夏季高峰的速率。这可能会让人感到困惑。
  • @AlderMoreno 与嵌套类无关。这与构图有关。
  • @AlderMoreno 你不必说对不起!我想在这里你可以找到答案meta.stackoverflow.com/questions/254570/…。另一方面,在这里发布绝不是错误的。恕我直言,我认为软件工程会更合适。只是我的2美分。谢谢

标签: java data-structures object-oriented-analysis


【解决方案1】:

这是一种方法:

class BaseRate {
    int hours;
    int price;

    public BaseRate(int hours, int price) {
        this.hours = hours;
        this.price = price;
    }
}

class SeasonalRate {
    BaseRate peakRate;
    BaseRate midPeakRate;
    BaseRate offPeakRate;

    public SeasonalRate(BaseRate peakRate, BaseRate midPeakRate, BaseRate offPeakRate) {
        this.peakRate = peakRate;
        this.midPeakRate = midPeakRate;
        this.offPeakRate = offPeakRate;
    }
}

class AnnualRates {
    SeasonalRate summerRate;
    SeasonalRate winterRate;

    public AnnualRates(SeasonalRate summerRate, SeasonalRate winterRate) {
        this.summerRate = summerRate;
        this.winterRate = winterRate;
    }

    public static void main(String[] args) {
        BaseRate peakWinterRateFor2019 = new BaseRate(1, 3);
        BaseRate midPeakWinterRateFor2019 = new BaseRate(1, 3);
        BaseRate offPeakWinterRateFor2019 = new BaseRate(1, 3);
        BaseRate peakSummerRateFor2019 = new BaseRate(1, 3);
        BaseRate midPeakSummerRateFor2019 = new BaseRate(1, 3);
        BaseRate offPeakSummerRateFor2019 = new BaseRate(1, 3);

        SeasonalRate winterRateFor2019 = new SeasonalRate(peakWinterRateFor2019, midPeakWinterRateFor2019, offPeakWinterRateFor2019);
        SeasonalRate summerRateFor2019 = new SeasonalRate(peakSummerRateFor2019, midPeakSummerRateFor2019, midPeakWinterRateFor2019);

        AnnualRates ratesFor2019 = new AnnualRates(summerRateFor2019, winterRateFor2019);
    }
}

【讨论】:

  • 您能否举例说明如何设置夏季高峰期的费率?我对枚举不太熟悉,所以它可以帮助我更好地理解这一点。谢谢你苏利亚!
  • 删除了枚举并添加了代码以更好地适应您的用例
  • 这正是我想要的,非常感谢
  • 不客气。在那种情况下你能接受我的回答吗?
猜你喜欢
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2010-12-15
  • 2012-03-14
  • 1970-01-01
  • 2020-06-25
相关资源
最近更新 更多