2017-03-01 33 views
1

这是作业作业。我在我的教官的许可下发布在这里。该任务是为一年前创建的课程添加方法,以找出两次之间的差异(以小时和分钟为单位)等等。我遇到的问题是,课程网站上的代码运行者说,发现两次相距甚远的差异时发生错误,但使用提供给我的跑步者时,我无法创建这会破坏我写的代码。以下是代码:发现两次差异时的问题

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似乎不会给我带来任何问题。你注意到我的代码有什么问题吗?

+0

我投票结束这个问题作为题外话,因为你没有包括什么“网站”这是你正在测试。我们应该如何解决你和你的网站之间的问题? – ControlAltDel

+1

你为什么使用原始类型?????? –

+1

它可能不同地考虑t4-t5和t5-t4。在你的例子中,t4-t5 = t5-t4 = 6:55,但t5-t4也可以是17:05。所以我想这可能会造成一些问题。 – Sanjeev

回答

1

9:55和10:05之间的差异 - 我们是否同意这是10分钟?从5分钟到10〜5分钟过去10

我改变t4t5到:

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分钟)。您需要分别将小时数和分钟数分别减去,然后对符号进行调整,具体来说,如果两个差异符号相反。