我正在编写一个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);
}
答案 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>做实际的工作。并且,想要使用PropertyChangeListener
和VetoableChangeListener
s。当您在降雨-10
中输入JFormattedTextField
时,它会向控制器发送属性更改事件,然后必须拒绝设置模型类,而不是否决更改。实际上,编写和应用InputValidator
会更简单。最好不要给用户错误的机会。