发现两次之间的差异时的问题
Problems when finding the difference between two times
这是家庭作业。我在我的导师的许可下在这里发帖。任务是向今年早些时候创建的 class 添加方法,以查找两次之间的差异(以小时和分钟为单位)等。我遇到的问题是课程网站上的代码运行器说在发现相距很远的两个时间之间的差异时出现错误,但是使用提供给我的运行器,我无法创建组合打破我写的代码的时间。下面是代码:
public class Time implements Comparable
{
private int hour;
private int minute;
public Time()
{
hour = 0;
minute = 0;
}
public Time(int h, int m)
{
if (h>=1&&h<=23)
hour = h;
else hour = 0;
if (m>=0&&m<=59)
minute = m;
else minute = 0;
}
public String toString()
{
String hourStr = new String();
String minStr = new String();
if (hour<10)
hourStr = "0" + Integer.toString(hour);
else hourStr = Integer.toString(hour);
if (minute<10)
minStr = "0" + Integer.toString(minute);
else minStr = Integer.toString(minute);
String milTime = hourStr + minStr;
return (milTime);
}
public String difference(Time t)
{
int base = Integer.parseInt(toString());
int compy = Integer.parseInt(t.toString());
int comp = Math.abs(compy-base);
if (comp%100>=60) {
comp-=(comp%100-(60-Math.abs((compy%100)-(base%100))));
}
String reee = "000" + Integer.toString(comp);
reee = reee.substring(reee.length()-4, reee.length());
reee = reee.substring(0, 2) + ":" + reee.substring(2,4);
reee = "Time difference: " + reee;
return reee;
}
}
我删除了一些不相关的方法。这是提供给我的跑步者的特定代码块:
Time t4 = new Time(12, 40);
Time t5 = new Time(5, 45);
System.out.println(t4.compareTo(t5));
System.out.println(t5.compareTo(t4));
System.out.println("Difference");
System.out.println(t4.difference(t5));
System.out.println(t5.difference(t4));
System.out.println(t4.difference(t4));
compareTo部分工作正常,但是差异方法是网站上说的我错了。但是,用任何组合替换 Times t4 和 t5 似乎不会给我任何问题。您是否注意到我的代码有任何可能使网站崩溃的问题?
9:55 和 10:05 之间的区别——我们同意是 10 分钟吗?从 5 分钟到 10 点到 10 点 5 分钟。
我将 t4
和 t5
更改为:
Time t4 = new Time(10, 5);
Time t5 = new Time(9, 55);
现在您的程序打印:
Difference
Time difference: 00:50
Time difference: 00:50
Time difference: 00:00
我猜这就是该网站反对的内容。
您正在减去 Integer.parseInt(toString())
的结果。我不认为这是合理的。相差 50,您无法判断是从 9:05 到 9:55(实际上是 50 分钟)还是从 9:55 到 10:05(仅 10 分钟)。您需要分别减去小时数和分钟数,然后对符号进行调整,特别是如果两个差值的符号相反。
这是家庭作业。我在我的导师的许可下在这里发帖。任务是向今年早些时候创建的 class 添加方法,以查找两次之间的差异(以小时和分钟为单位)等。我遇到的问题是课程网站上的代码运行器说在发现相距很远的两个时间之间的差异时出现错误,但是使用提供给我的运行器,我无法创建组合打破我写的代码的时间。下面是代码:
public class Time implements Comparable
{
private int hour;
private int minute;
public Time()
{
hour = 0;
minute = 0;
}
public Time(int h, int m)
{
if (h>=1&&h<=23)
hour = h;
else hour = 0;
if (m>=0&&m<=59)
minute = m;
else minute = 0;
}
public String toString()
{
String hourStr = new String();
String minStr = new String();
if (hour<10)
hourStr = "0" + Integer.toString(hour);
else hourStr = Integer.toString(hour);
if (minute<10)
minStr = "0" + Integer.toString(minute);
else minStr = Integer.toString(minute);
String milTime = hourStr + minStr;
return (milTime);
}
public String difference(Time t)
{
int base = Integer.parseInt(toString());
int compy = Integer.parseInt(t.toString());
int comp = Math.abs(compy-base);
if (comp%100>=60) {
comp-=(comp%100-(60-Math.abs((compy%100)-(base%100))));
}
String reee = "000" + Integer.toString(comp);
reee = reee.substring(reee.length()-4, reee.length());
reee = reee.substring(0, 2) + ":" + reee.substring(2,4);
reee = "Time difference: " + reee;
return reee;
}
}
我删除了一些不相关的方法。这是提供给我的跑步者的特定代码块:
Time t4 = new Time(12, 40);
Time t5 = new Time(5, 45);
System.out.println(t4.compareTo(t5));
System.out.println(t5.compareTo(t4));
System.out.println("Difference");
System.out.println(t4.difference(t5));
System.out.println(t5.difference(t4));
System.out.println(t4.difference(t4));
compareTo部分工作正常,但是差异方法是网站上说的我错了。但是,用任何组合替换 Times t4 和 t5 似乎不会给我任何问题。您是否注意到我的代码有任何可能使网站崩溃的问题?
9:55 和 10:05 之间的区别——我们同意是 10 分钟吗?从 5 分钟到 10 点到 10 点 5 分钟。
我将 t4
和 t5
更改为:
Time t4 = new Time(10, 5);
Time t5 = new Time(9, 55);
现在您的程序打印:
Difference
Time difference: 00:50
Time difference: 00:50
Time difference: 00:00
我猜这就是该网站反对的内容。
您正在减去 Integer.parseInt(toString())
的结果。我不认为这是合理的。相差 50,您无法判断是从 9:05 到 9:55(实际上是 50 分钟)还是从 9:55 到 10:05(仅 10 分钟)。您需要分别减去小时数和分钟数,然后对符号进行调整,特别是如果两个差值的符号相反。