布尔表达式 - Java

时间:2013-12-01 22:38:54

标签: java

我正在编写一个Java代码,在第0到第6天显示降雨量的直方图(以毫米为单位),即。 day0是星期一,day6是星期日。我写的代码是7天以上的平均降雨量如下:

                 public float averageRain() {
                   int d;                                  
                   float total = 0.0f;                         
                   for (d = 0; d < days; d++)
                     total=total + rain[d];                 
                   return(total / days); 
                 }

但是我对如何解决以下问题感到困惑:如果输入小于0或大于6的日期编号,则会收到错误消息。我的任务是修改一个名为“addRain”的方法来检查日期是否在范围内(即0或更大,但小于常数天)。如果日期有效,请将RAINFALL添加到当天的总数中并返回true。否则返回false。通过这样做,当我运行程序时,将忽略无效的天数。此外,我必须修改代码,以便不接受负降雨值(例如-3毫米)。谁能告诉我如何解决这个问题?到目前为止,我所做的就是:

                public boolean addRain(int day, float rainfall) {
                  rain[day] += rainfall;                      
                  return(true);  
                }

1 个答案:

答案 0 :(得分:1)

我认为days是一个值为7的常量。将其替换为:

private static final int DAYS_IN_WEEK = 7;

您是否只想忽略无效的日期数字或降雨量值?这是一个互动节目吗?而且,您是否希望让人们在一天内两次进入降雨量值?我可以看到有人在星期三进入10mm,然后尝试更正并输入5mm。目前,没有办法这样做。如果您知道如何使用例外,则可以让方法抛出java.lang.IllegalArgumentException并将其报告给用户,以便他可以再试一次:

public void setRainForDay(int day, float rainfall) {
    if (day < 0 || day >= DAYS_IN_WEEK) {
        // Throw an IAE.
    }
    if (rainfall < 0.0f) {
        // Throw an IAE.
    }
    rain[day] = rainfall;  // Set, not add.
}

调用例程捕获IAE,将其报告给用户,用户可以再试一次。

摇摆

我没有意识到该应用程序应该是一个Swing应用程序。在这种情况下,抛出异常不是合适的方法。相反,人们希望拥有一个模型类,一个保存数据,一个想拥有视图类,一个想拥有控制器类< / em>做实际的工作。并且,想要使用PropertyChangeListenerVetoableChangeListener s。当您在降雨-10中输入JFormattedTextField时,它会向控制器发送属性更改事件,然后必须拒绝设置模型类,而不是否决更改。实际上,编写和应用InputValidator会更简单。最好不要给用户错误的机会。