【发布时间】: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;
}
}
我们有什么
- 添加一个布尔字段 isAM,它的值为 true(早上)和 false(下午)。
- 我们创建了两个新方法; setMorning 将 isAM 设置为 true,而 setAfternoon 将 isAM 设置为 false。
- 默认情况下,两个构造函数都会将一天中的时间初始化为早上,因此都调用 setMorning。
- 在 timeTick 中,我们需要检查小时是否翻转,这意味着它要么从上午更改为下午,要么从下午更改为上午。注意使用:isAM = !isAM
- 在 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