java - boolean 表达式——Java

标签 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);  
                }

最佳答案

我假设 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

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

关于java - boolean 表达式——Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20318176/

相关文章:

java - 保存到数据库使按钮无响应

java - Android - 通过 DDMS 分析特定线程(UI 线程)

java - Warbler 不使用 warble war 打包文件

java - 我可以在 Java 中强制垃圾收集吗?

java - 获取 Java VM 引用,从 C++ 和并发创建 Java 对象

java - 奇数和偶数的数组列表,停止于 -1

java - 如何将文本添加到 JTextArea?

java - 从 Scanner 获取输入时 Maven 挂起

java - 从 SQL 到 HSQLDB 的 IIF 函数

java - (Node.js、socket.io)JSONObject 无法转换为 int