2016-03-05 76 views
0

我怎样才能优化有很多切换案例?有没有其他方法可以做我想做的事情?如何优化很多开关盒?

我有一个时间滑块,这个滑块更新变量currentTime与当前滑块所在的值(1-24),并调用updateTime()方法。在这种方法中,我有1 - 24的开关情况(在这个例子中只有3个)。我可以用一种更简单的方法做到这一点,而不是制作24个开关盒?

private void updateTime() { 
    switch (currentTime) { 
     case 1: 
      hourlyData = weatherAPI.HourlyReport(1); 
      setHourlyData(); 
      break; 
     case 2: 
      hourlyData = weatherAPI.HourlyReport(2); 
      setHourlyData(); 
      break; 
     ... 
     case 24: 
      hourlyData = weatherAPI.HourlyReport(24); 
      setHourlyData(); 
      break; 
     default: 
      System.out.println("Oops"); 
      break; 
    } 
} 

-

public Map HourlyReport(int hour) { 
    Hourly hourly = new Hourly(fio); 
    //In case there is no hourly data available 
    if (hourly.hours() < 0) { 
     System.out.println("No hourly data."); 
    } else { 
     hourlyData.put("Temp", hourly.getHour(hour).temperature()); // Temperature 
     hourlyData.put("TempFeel", hourly.getHour(hour).apparentTemperature()); // Feel Temperature 
     hourlyData.put("Humidity", hourly.getHour(hour).humidity()); // Humidity 
     hourlyData.put("WindSpeed", hourly.getHour(hour).windSpeed()); // Wind Speed 
     hourlyData.put("Precip", hourly.getHour(hour).precipProbability()); // Precipitation 
     hourlyData.put("TimeStamp", hourly.getHour(hour).time());// TimeStamp 
    } 
    return hourlyData; 
} 
+7

哼,怎么样if(currentTime <1 || currentTime> 24){Oops} else { hourlyData = weatherAPI.HourlyReport(currentTime); }'? – Tunaki

+0

无法理解你的问题是什么,上面的代码是做你想做的真正正确的方式 – SSH

回答

6

使用一个开关没有在这种情况下合理的。使用简单if

if (currentTime > 0 && currentTime < 25) { 
    hourlyData = weatherAPI.HourlyReport(currentTime); 
    setHourlyData(); 
} else { 
    System.out.println("Oops"); 
} 
+0

完全正确,不确定我为什么要用开关盒!谢谢。 –

+0

@GordonFreemanTurtle不客气。随时将答案标记为已接受。 –

1

你可以使用一个简单的if语句来验证currentTime的价值,只是把它传递给weatherAPI.HourlyReport

private void updateTime() { 
    if (currentTime >= 1 || currentTime <= 24) { 
     hourlyData = weatherAPI.HourlyReport(currentTime); 
     setHourlyData(); 
    } else{ 
     System.out.println("Oops"); 
    } 
} 
0
private boolean isValidHour(){ 
     if (currentTime >= 1 && currentTime <= 24) 
      return true; 
     else 
      return false; 
    } 


    private void updateTime() { 
      if(this.isValidHour()) 
      hourlyData = weatherAPI.HourlyReport(currentTime); 
      else 
      System.out.println("Oops"); 
} 
2

我会确认第一

private void updateTime() { 
    if (currentTime < 1 || currentTime > 24) 
     throw new IllegalStateException("currentTime: " + currentTime); 

    hourlyData = weatherAPI.HourlyReport(currentTime); 
    setHourlyData(); 
}