2017-03-01 6 views
1

Dies ist für eine Hausaufgabe. Ich poste hier mit der Erlaubnis meines Ausbilders. Die Aufgabe besteht darin, Methoden zu einer Klasse hinzuzufügen, die früher im Jahr erstellt wurde, um unter anderem den Unterschied (in Stunden und Minuten) zwischen zwei Zeiten zu finden. Das Problem, das ich habe, ist, dass der Code-Runner auf der Website des Kurses sagt, dass es einen Fehler gibt, wenn man den Unterschied zwischen zwei deutlich voneinander entfernten Zeiten findet, aber mit dem Runner, den man mir gegeben hat, kann ich keine Kombination daraus erstellen mal das bricht den Code den ich geschrieben habe. Unten ist der Code:Probleme beim Finden der Differenz zwischen zwei Zeiten

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; 
    } 
} 

Ich habe einige der irrelevanten Methoden gelöscht. Hier ist der jeweilige Code-Block aus dem Läufer, die mir zur Verfügung gestellt wurde:

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)); 

Die compareTo Teile funktionieren, aber der Unterschied Methode ist, was die Website sagt, dass ich falsch haben. Aber die Zeiten t4 und t5 durch irgendeine Kombination zu ersetzen, scheint mir keine Probleme zu bereiten. Findest du etwas falsch mit meinem Code, der möglicherweise die Website stolpern könnte?

+0

Ich stimme für das Schließen dieser Frage als Off-Topic ab, weil Sie nicht eingeschlossen haben, welche "Website" Sie testen möchten. Wie sollen wir das Problem zwischen Ihnen und Ihrer Website ausräumen? – ControlAltDel

+1

Warum verwenden Sie rohe Typen ?????? –

+1

Es könnte t4-t5 und t5-t4 anders betrachten. In Ihrem Beispiel t4-t5 = t5-t4 = 6: 55, aber t5-t4 könnte auch 17:05 sein. Ich schätze, das könnte ein Problem verursachen. – Sanjeev

Antwort

1

Der Unterschied zwischen 9:55 und 10:05 - stimmen wir zu, dass es 10 Minuten ist? 5 Minuten bis 10-5 Minuten nach 10.

änderte ich t4 und t5 zu:

Time t4 = new Time(10, 5); 
    Time t5 = new Time(9, 55); 

Jetzt ist Ihr Programm aus:

Difference 
Time difference: 00:50 
Time difference: 00:50 
Time difference: 00:00 

Meine Vermutung ist, dass dies, was die Website widerspricht.

Sie subtrahieren die Ergebnisse von Integer.parseInt(toString()). Ich denke nicht, dass das gesund ist. Mit einem Unterschied von 50 kann man nicht sagen ob es von 9:05 bis 9:55 (tatsächlich 50 Minuten) oder von 9:55 bis 10:05 (nur 10 Minuten) war. Sie müssen Stunden separat und Minuten getrennt subtrahieren und dann die Anpassungen für das Zeichen vornehmen, insbesondere wenn die beiden Unterschiede entgegengesetzte Vorzeichen haben.

Verwandte Themen