我们被要求为秒表构建一个构造函数,它采用格式为“##:##:###”的字符串,并相应地更新分钟,秒和毫秒(私有实例变量)。例如,"1:21:300"
表示1分21秒300毫秒。
因此,我尝试使用string.split()
与parseInt
配对来更新值。但是,该程序将无法编译。根据eclipse,我的构造函数具有正确的语法,但是我正在做的事情有问题。我从未实际使用split
或parseInt
,因此我可能会使用这些100%错误。谢谢。
public StopWatch(String startTime){
String [] timeArray = startTime.split(":");
if(timeArray.length == 2){
this.minutes = Integer.parseInt(timeArray[0]);
this.seconds = Integer.parseInt(timeArray[1]);
this.milliseconds = Integer.parseInt(timeArray[2]);
}
else if(timeArray.length == 1){
this.minutes = 0;
this.seconds = Integer.parseInt(timeArray[1]);
this.milliseconds = Integer.parseInt(timeArray[2]);
}
else if(timeArray.length == 0){
this.minutes = 0;
this.seconds = 0;
this.milliseconds = Integer.parseInt(timeArray[2]);
}
else{
this.minutes = 0;
this.seconds = 0;
this.milliseconds = 0;
}
}
P.S。 Junit测试说“比较失败:预期0:00:000,但是20:10:008”试图做:
s = new StopWatch("20:10:8");
assertEquals(s.toString(),"20:10:008");
答案 0 :(得分:2)
将toString()方法替换为:
public String toString() {
String paddedMinutes = String.format("%02d", this.minutes);
String paddedSeconds = String.format("%02d", this.seconds);
String paddedMilliseconds = String.format("%03d", this.milliseconds);
return paddedMinutes + ":" + paddedSeconds + ":" + paddedMilliseconds;
}
答案 1 :(得分:2)
正如其他答案中所提到的,长度每个都偏离1,但是你在if块中使用的索引也是关闭的;例如。如果长度为1,则唯一可用的索引为0,如果长度为2,则索引的可用值为0和1.
因此,你得到一个看起来像的构造函数:
class StopWatch {
int minutes;
int seconds;
int milliseconds;
public StopWatch(String startTime) {
String[] timeArray = startTime.split(":");
if (timeArray.length == 3) {
this.minutes = Integer.parseInt(timeArray[0]);
this.seconds = Integer.parseInt(timeArray[1]);
this.milliseconds = Integer.parseInt(timeArray[2]);
} else if (timeArray.length == 2) {
this.minutes = 0;
this.seconds = Integer.parseInt(timeArray[0]);
this.milliseconds = Integer.parseInt(timeArray[1]);
} else if (timeArray.length == 1) {
this.minutes = 0;
this.seconds = 0;
this.milliseconds = Integer.parseInt(timeArray[0]);
} else {
this.minutes = 0;
this.seconds = 0;
this.milliseconds = 0;
}
}
}
答案 2 :(得分:1)
虽然Java数组是从零开始的,但它们的长度只是计算元素的数量。
因此,{1,2,3}.length
将返回3
。
现在编写代码时,您将获得左右ArrayOutOfBounds
个例外。
答案 3 :(得分:0)
if(timeArray.length == 2){
应该是:
if(timeArray.length == 3){
等等。
20:10:8分裂:将给你3的长度;)