用枚举数据计算

时间:2013-11-18 09:05:10

标签: java enums double getter

我正在尝试编写一个getter,它从枚举中获取特定数据并返回一个double,我将在稍后的代码中使用它,我不知道该怎么做。这是我到目前为止所提出的:

//This getter takes the enum of Month and converts it so it returns the mean precipitation of a certain month

public double getPrecipitationMonth(Month month){
//more in here
return this.precipitationMonths[month.ordinal()];

有问题的枚举是一年中的几个月,即{JANUARY,FEBRUARY ...},每个月的数据都在一个单独的文件中。

我是编程新手 - 希望你能提供帮助!谢谢

5 个答案:

答案 0 :(得分:0)

我会写eum类似的东西:

public enum Month {
    JAN (1.0),
    FEB (2.0),  
    MAR (3.0);


    private double mId;

    public static Month     fromDoubleToEnum( double value ) throws Exception{
        for ( Month c : Month.values() ) {
            if ( c.mId == value ) {
                return c;
            }
        }

        throw new Exception( "Illegal Month value: " + value );
            }

    public double fromEnumToDouble(){
        return mId;
    }


    private EModule (double num){
        mId = num;
    }
}

我们的方法有:fromEnumToDouble,在double上返回enum

测试

public static void main(String[] args) {
    Month mod = Month.FEB;

    double toDouble = mod.fromEnumToDouble();

    System.out.println(toDouble); // out 2.0
}

答案 1 :(得分:0)

我认为你的总体想法非常合理。但我只是使用这样的地图:

Map<Month,Double> data = new HashMap<>;
for(Row row : readFromFile()){
    data.put(row.getMonth(), row.getData());
}

这样更明显。

答案 2 :(得分:0)

您可以使用HashMap,将枚举值指定为键

enum Month {
    // Your enum
}    

HashMap< Month, Double > monthPrecipitation = new HashMap< Month, Integer >();

public double getPrecipitationMonth( Month month ) {
    return monthPrecipitation.get( month );
}

答案 3 :(得分:0)

使用EnumMap来存储precipitationMonths数组。

EnumMap<Month,Something> precipitationMonths = new EnumMap<Month,Something>(Month.class);
precipitationMonths.put(Month.JANUARY, someValue); // Add a value
Something someValue = precipitationMonths.get(Month.JANUARY); // Get a value

答案 4 :(得分:0)

关于您的数据位于文件中,您需要创建一个类来存储该数据并能够映射它们。

Java对日历的支持非常差,但您可以使用Calendar

来处理它

您可以为日历创建枚举,但这不是必需的。

 enum Month{
   JANUARY(Calender.JANUARY);

   private final int month;

   Month(int month) {
     this.month = month;
   }

   public int month() {
    return month;
   }
 }

解决第一个将文件中的数据与月份匹配的问题。

 private final Map<Month,Double> precipitationMap = new EnumMap<>();

 private void assignPrecipitation(Month month, double precipitation) {
    this.precipitationMap.put(month,precipitation);
 }

 public double getPrecipitation(Month month) {

   if(this.precipitationMap.contains(month) {
     return this.precipitationMap.get(month).doubleValue();
   }

   throw new IllegalStateException("The Precipitation was not found for: " + myCalendar); 

 }