我正在尝试编写一个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 ...},每个月的数据都在一个单独的文件中。
我是编程新手 - 希望你能提供帮助!谢谢
答案 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);
}