2017-03-01 32 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分鐘)。您需要分別將小時數和分鐘數分別減去,然後對符號進行調整,具體來說,如果兩個差異符號相反。