【问题标题】:Clock tick change in JavaJava中的时钟滴答变化
【发布时间】:2015-08-31 04:37:54
【问题描述】:

好的,所以我是新手,刚刚注册,但是我需要一些帮助来解释一下..

我有一个任务要求我通过一些调整将 24 小时制转换为 12 小时制。我很确定我快到了,但是当使用代码中的 timeTick 方法更改小时时,我无法切换布尔值。老实说,我相信其余的都很好,但我们将不胜感激:

    public class ClockDisplay
{
    private NumberDisplay hours;
    private NumberDisplay minutes;
    private String displayString; 
    private boolean isAM;


/**
 * Constructor for ClockDisplay objects. This constructor 
 * creates a new clock set at 00:00.
 */
public ClockDisplay()
{
    hours = new NumberDisplay(12);
    minutes = new NumberDisplay(60);
    updateDisplay();
    setMorn();
}

/**
 * Constructor for ClockDisplay objects. This constructor
 * creates a new clock set at the time specified by the 
 * parameters.
 */
public ClockDisplay(int hour, int minute)
{
    hours = new NumberDisplay(12);
    minutes = new NumberDisplay(60);
    setTime(hour, minute);
    setMorn();
 }

/**
 * This method should get called once every minute - it makes
 * the clock display go one minute forward.
 */
public void timeTick()
{
    minutes.increment();
 if(minutes.getValue() == 0) {  // it just rolled over!
        hours.increment();
 }
 if (hours.getValue() == 12)
 {
     isAM = !isAM;
 }

     updateDisplay();
}

private void setMorn()
{
        isAM = true;
}
private void setAft()
{
        isAM = false;   
}

/**
 * Set the time of the display to the specified hour and
 * minute.
 */
public void setTime(int hour, int minute)
{   
    hours.setValue(hour);
    minutes.setValue(minute);
    updateDisplay();
}

/**
 * Return the current time of this display in the format HH:MM.
 */
public String getTime()
{
    return displayString;
}


/**
 * Update the internal string that represents the display.
 */
private void updateDisplay()
{
    int hour = hours.getValue();
    String daynight;
    if (isAM = true)
    {
    daynight = "AM";
    if (hour == 0) 
    {
     hour = 12;   
    }
}
else
{
    isAM = false;
    daynight = "PM";
    if (hour == 0) 
    {
     hour = 12;   
    }
}
    displayString = hour + ":" + 
    minutes.getDisplayValue() + daynight;


  }
}

我们有什么

  1. 添加一个布尔字段 isAM,它的值为 true(早上)和 false(下午)。
  2. 我们创建了两个新方法; setMorning 将 isAM 设置为 true,而 setAfternoon 将 isAM 设置为 false。
  3. 默认情况下,两个构造函数都会将一天中的时间初始化为早上,因此都调用 setMorning。
  4. 在 timeTick 中,我们需要检查小时是否翻转,这意味着它要么从上午更改为下午,要么从下午更改为上午。注意使用:isAM = !isAM
  5. 在 updateDisplay 中,我们需要根据 isAM 是真还是假来创建后缀“am”或“pm”。

【问题讨论】:

  • 我有这个。 1. 添加一个布尔字段 isAM,其值为 true(早上)和 false(下午)。 2.我们创建了两个新方法; setMorning 将 isAM 设置为 true,而 setAfternoon 将 isAM 设置为 false。 3. 两个构造函数都将默认时间初始化为早上,因此都调用 setMorning。 4. 在 timeTick 中,我们需要检查小时是否翻转,这意味着它要么从 am 变为 pm,要么从 pm 变为 am。注意使用:isAM = !isAM 5. 在 updateDisplay 中,我们需要根据 isAM 是真还是假来创建后缀“am”或“pm”。
  • 不完全确定 NumberDisplay 是如何工作的,但它有可能是 0 索引的,这意味着它将在 11 而不是 12 处翻转!你可能想检查一下。
  • 哦,您可能还想将您的if(hours.getValue() == 12) 移到if(minutes.getValue() == 0) 块中,否则您的 AM/PM 显示将每分钟翻转一次。
  • 最初是的,它确实这样做了,但是我调整了代码,使其在 12 处翻转。问题在于输出,例如如果我将时间设置为上午 11:59 并在输出上打勾,则应将上午更改为下午,并将布尔形式更改为 true 为 false。时间正常工作,但上午到下午的布尔开关和输出却没有。
  • 另一件事:在updateDisplay() 中有if (isAM = true)。这会将isAM设置true,而不是检查它。它应该是if(isAM == true) 或简单的if(isAM)

标签: java


【解决方案1】:

您的问题几乎可以肯定是这样一行:

if (isAM = true)

这实际上是将isAM 设置为true,因此表达式的结果也是true,所以else 部分永远不会被执行。

你的意思可能是:

if (isAM == true)

或者 - 更好的是:

if (isAM)

【讨论】:

  • 进行了建议的调整,但它仍然不会将 am 更改为 pm 并将 isAM 更改为 false
  • 在 timeTick 中,我们需要检查小时是否翻转,这意味着它要么从上午变为下午,要么从下午变为上午。注意使用:isAM = !isAM 是我出错的地方:)
  • 好的,到目前为止,我们刚刚对一些建议的更改进行了另一次测试。 timeTick() 方法肯定会出错。我摆脱了所有东西,离开了 isAm = !isAM 和 updateDisplay() 并且它起作用了。所以 if 语句有问题。
【解决方案2】:

好的,多亏了让我思考的 Dragondraikk,我终于解决了。这个问题就像他建议的那样,很好。当我将小时数设置为 0 - 11 并打勾时。在运行 updateDisplay 之前,我没有将 0 更改为 12,因此它实际上是 0 而不是 12:

 public void timeTick()
    {
     minutes.increment()
     if(minutes.getValue() == 0) {  // it just rolled over!
         hours.increment(); 
        }
     if (hours.getValue() == 0)
         {
         isAM = !isAM;   
        }   
    updateDisplay();
    }

这解决了问题,现在可以了所以:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    相关资源
    最近更新 更多