关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
13天前关门了。
改进这个问题
如何创建一个“public void changedisplay()”方法来更改tostring方法提供的内容?
所以,要说清楚。下面是一个例子。
主要方法:
sportWatch s = new sportWatch(0, 0, 0);
System.out.println(s);
s.setHeartRate(91);
s.changeDisplay();
System.out.println(s);
在弹出对象->输出时:
时间:0:0:0
时间:0:0:0
因为sportwatch类中的方法tostring()。
public String toString() {
String secStr = Integer.toString(this.sec);
String minStr = Integer.toString(this.min);
String hrStr = Integer.toString(this.hr);
return "Time: "+ hrStr + ":" + minStr + ":" + secStr ;
}
我不知道如何编写一个在时间和心率之间切换的changedisplay方法。
另外,这是设定心率的方法
public void setHeartRate(int value) {
this.heartRate = value;
}
最终输出应如下所示:
时间:0:0:0
心率:91
每次我使用changedisplay方法时,它都应该在时间和心率之间切换。
3条答案
按热度按时间arknldoa1#
翻转布尔值作为标志
正如hö亨纳,创造一个
boolean
您的帐户上的成员字段SportWatch
班级。使用if-then测试来确定返回的是一种文本还是另一种文本、心跳还是当前时间。每次调用你的方法getDisplayText
,在返回所需文本时翻转该真/假值。如果你的目标
SportWatch
可以跨线程使用,请使用类型为的成员字段AtomicBoolean
. (您还需要进行其他更改以使代码线程安全。)枚举而不是布尔值
要使代码更具自文档性,请使用enum对象,而不仅仅是布尔值true/false。
定义枚举
DisplayMode
有两个名为TIME
以及HEART
.将布尔成员字段替换为类型为的字段
DisplayMode
命名currentDisplayMode
存储两个枚举对象之一。测试每个enum对象是否存在,以确定要返回的文本类型getDisplayText
方法。当然,在每个请求中用另一个对象替换一个对象,而不是翻转布尔值。或许可以定义一个
rotate
方法来获取下一个枚举对象。使用枚举而不是布尔值还有另一个好处:枚举为将来可能有两种以上的其他显示模式做准备。
tostring是为程序员和测试人员提供的,而不是为用户提供的
不涉及对
toString
在任何业务逻辑中。定义您的toString
方法返回在用于调试和日志记录时有意义的文本。这个toString
方法不打算在用户界面中使用。java.time文件
不要重复计时。java拥有业界领先的日期时间处理框架java.time。所以用它。
一天中没有日期和区域/偏移的时间由表示
LocalTime
.但在真正的手表里,你会跟踪
Instant
内部。对于用户界面,可以应用时区(ZoneId
)得到一个ZonedDateTime
. 然后,您将使用用户选择的Locale
与DateTimeFormatter.ofLocalizedTime
.所有这些都已经在stackmoverflow上讨论过很多次了。因此,搜索以了解更多信息。
trnvg8h32#
在您的类中,您可以创建
boolean
用于跟踪显示状态的变量,例如onchangeDisplay()
,它会将值设置为true
继续resetDisplay()
,它会将值设置为false
. 现在toString()
函数可以利用此变量的值返回值。用法:
输出:
一些要点:
您不需要转换
hr
,min
,或sec
至String
通过使用Integer#toString
. 将字符串添加到int
,此转换将自动进行。注意我内心的变化toString
实现如上所示。始终遵循java命名约定,例如,类的名称应该是
SportWatch
而不是sportWatch
.ioekq8ef3#
我认为应该在tostring方法中使用参数。您可以添加一个枚举来确定应该使用的格式,如下所示。
在tostring方法中,采用typeofsportwatchformat参数