gpt4 book ai didi

Java时钟由两个显示对象组成

转载 作者:行者123 更新时间:2023-11-30 04:28:52 26 4
gpt4 key购买 nike

我的家庭作业让我很困惑。我有一个 24 小时时钟,它由两个 numberDisplay 对象组成。numberDisplay 对象有一个限制器来控制它们,因此当分钟达到 60 时,它会回滚到零并增加小时数。当小时数达到 24 时,它会回滚到零。

我的任务是将其从 24 小时制更改为 12 小时制,但我无法更改有关对象的任何内容。只是他们如何互动

到目前为止我已经做到了:

private void updateDisplay()
{
int functionHours = Integer.parseInt(hours.getDisplayValue());
String amPM = "AM";
if ( functionHours == 0 ) {
hours.setValue(12);
amPM = "AM";
}
else if ( functionHours > 0 && functionHours < 12 )
{
hours.setValue(functionHours);
amPM = "AM";
}
else if ( functionHours == 12 ) {
hours.setValue(functionHours);
amPM = "PM";
}
else if ( functionHours > 12 && functionHours <= 23 ) {
functionHours -= 12;
hours.setValue(functionHours);
amPM ="PM";
}
displayString = hours.getDisplayValue() + ":" + minutes.getDisplayValue() + " " + amPM;
}

但是,当 hours.value 从 23 变回零时,时钟拒绝变回 AM。我很困惑如何实现这一目标。

NumberDisplay 对象:

/**
* The NumberDisplay class represents a digital number display that can hold
* values from zero to a given limit. The limit can be specified when creating
* the display. The values range from zero (inclusive) to limit-1. If used,
* for example, for the seconds on a digital clock, the limit would be 60,
* resulting in display values from 0 to 59. When incremented, the display
* automatically rolls over to zero when reaching the limit.
*
* @author Michael Kölling and David J. Barnes
* @version 2011.07.31
*/
public class NumberDisplay
{
private int limit;
private int value;

/**
* Constructor for objects of class NumberDisplay.
* Set the limit at which the display rolls over.
*/
public NumberDisplay(int rollOverLimit)
{
limit = rollOverLimit;
value = 0;
}

/**
* Return the current value.
*/
public int getValue()
{
return value;
}

/**
* Return the display value (that is, the current value as a two-digit
* String. If the value is less than ten, it will be padded with a leading
* zero).
*/
public String getDisplayValue()
{
if(value < 10) {
return "0" + value;
}
else {
return "" + value;
}
}

/**
* Set the value of the display to the new specified value. If the new
* value is less than zero or over the limit, do nothing.
*/
public void setValue(int replacementValue)
{
if((replacementValue >= 0) && (replacementValue < limit)) {
value = replacementValue;
}
}

/**
* Increment the display value by one, rolling over to zero if the
* limit is reached.
*/
public void increment()
{
value = (value + 1) % limit;
}
}

最佳答案

考虑一下如果代码中的 hours.getDisplayValue() == 23 会发生什么。在最后一个 block 中,您可以这样更改它:

// functionHours is 23.
else if ( functionHours > 12 && functionHours <= 23 ) { // OK
functionHours -= 12; // now functionHours is 11
hours.setValue(functionHours); // set hours.value to 11 !!
amPM ="PM";

下次更新时,hours.value 可能会增加 1,然后其值将是 12。但在您的代码中,该值必须小于 12,amPM 才能变为“AM”。这就是为什么它停留在“PM”。

我不太明白您的要求,但您可能不应该修改 hours 对象中的值,而是使用装饰器模式在其上添加 12 小时功能。

关于Java时钟由两个显示对象组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15128256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com