2016-07-25 11 views
-1

Ich habe erst letzte Woche Java gelernt und bin derzeit auf meiner Übung fest. Grundsätzlich ist das Problem ist, dass Sie zwei Zahlen in der Armee Zeit in Anspruch nehmen, und dann ausgegeben, was der Unterschied ist zum BeispielFormatieren von Zahlen zur Armeezeit (Big Java Ex. 4.15)

Please Enter First time : 0900 
Please Enter second time: 1730 
Result - > 8 hours and 30 minutes 

Der Bonus des Problems ist, um sicherzustellen, dass das Programm funktioniert, wenn das erste Mal größer als der zweite ist. Zuerst versuche ich den ersten Teil zu lösen und here, was ich bisher

class TimeInterval{ 
     private double timeOne; 
     private double timeTwo; 
     public TimeInterval(double timeOne, double timeTwo){ 
      timeOne = this.timeOne; 
      timeTwo = this.timeTwo; 
     } 

     public double getMinutes(){ 
      double minuteDiff = timeTwo - timeOne; 
      minuteDiff = minuteDiff%60.0; 
      return minuteDiff; 
     } 
     public double getHours(){ 
      double hours = timeTwo - timeOne; 
      hours = hours - getMinutes(); 
      hours = hours/60.0; 
      return hours; 
    } 
} 

public class DataSet{ 
    public static void main(String [] args){ 
     TimeInterval time = new TimeInterval(0900,1730); 

    } 
} 

Jetzt heres was trippy habe. Ich möchte mein neues Objekt mit timeOne als 0900 machen, aber ich bekomme einen Fehler. Es sagt "Integer zu lang", das scheint mir ziemlich lustig zu sein, also habe ich etwas recherchiert. Im letzten Abschnitt meines Buches in Kapitel 4 sprechen wir über Sachen Formatierung, wie mit System.out.printf und wie %d, %f

ich SO sah auf und fand ich einen Weg, wo ich hier so etwas wie

String.format("%05d", yournumber); 

tun können Sie können 5 0 vor Ihre Nummer setzen. Die Sache ist, ich bin mir nicht sicher, wie ich das in meinen Code implementieren soll. Ich habe versucht, timeTwo = String.format ... etc, aber dann, da es eine Zeichenfolge ist, kann ich nicht wirklich Mathe darauf machen. Auch wird es mich nicht zu einem Doppel nach String.format. konvertieren lassen Wie soll ich mich meinem Problem nähern?

+0

Sie müssen aus den USA kommen, wo die 24-Stunden-Zeit als [Militärzeit] bezeichnet wird (https://en.wikipedia.org/wiki/Military_time). Der Rest der Welt ist "zweisprachig" und benutzt sowohl die 12-Stunden- als auch die 24-Stunden-Uhr, die erste für Gelegenheitsangelegenheiten und die Letztere für wichtige Dinge, die Halbleiter als Zugfahrpläne haben. Also besser die Terminologie "24-Stunden-Uhr" verwenden. –

+0

Ah vielleicht formell. Ich nenne es so in Kanada und niemand hatte Probleme mich zu verstehen. –

+0

Um den Wikipedia-Artikel zu zitieren, habe ich verlinkt: "Es wird im Volksmund als militärische Zeit in den Vereinigten Staaten bezeichnet, [4] anglophones Kanada und eine Handvoll anderer Länder [1], wo die 12-Stunden-Uhr immer noch dominant ist." deckt ungefähr 0.4 der 7,4 Milliarden Menschen auf der Erde ab –

Antwort

3

Zahlenliterale berechnen, die mit einer Null beginnen, werden interpretiert als octal Nummern, Basis 8, die nur Ziffern 0-7 verwenden können.

Somit ist das numerische Literal 0900 eine ungültige oktale Nummer. Versuchen:

TimeInterval time = new TimeInterval(900, 1730); 

Tipp: Vermeiden Sie double für Sie Felder und Parameter angeben können. Verwenden Sie stattdessen int, wodurch die Ungenauigkeit von double nicht beeinträchtigt wird. int kann jede beliebige Anzahl/Zeit verarbeiten.

+0

Yeah du hast recht, ich dachte ich müsste Mathe mit den Zahlen zuerst machen damit ich machte sie doppelt. Okay, ich verstehe, dass ich 0900 nicht kann, aber gibt es eine Möglichkeit, meine Variable so zu transformieren, dass ich 0900 eingeben kann? In einem anderen numerischen System bin ich vielleicht nicht so gut über Oktalzahlen oder so etwas informiert, aber es muss einen Weg geben, oder? –

+0

@cres wenn Sie "Daten eingeben möchten", ich nehme an, Sie meinen eine Zeichenfolge? Wenn ja, können Sie eine Zeichenkette zu einem int wie diesem analysieren 'int num = Integer.parseInt ("1234"); ' – Bohemian

+0

Ich meinte nur, zu Lernzwecken gibt es eine Möglichkeit, dass ich mein Double so rekonfigurieren kann, dass es x akzeptiert Menge von 0 vor 900 oder etwas in der Art? Damit das in der Tat funktioniert sobald ich (0900,1730) setze? –

-2

finden Sie auf diesen Link für die Antworten

https://www.mkyong.com/java/how-to-calculate-date-time-difference-in-java/

1) Link oben zeigt, wie lange Werte auf dem Laufenden konvertieren und die Differenz

+0

Warum verwenden sie Longs? Gibt es eine Möglichkeit, die eigene Variable (timeTwo) akzeptieren zu können? 0 ist in der Front, oder sogar eine 0 –

+0

ist es nicht möglich, das Zeitintervall zu erhalten, indem Sie nur zwei doppelte Werte subtrahieren ... weil 0930 double unterscheidet sich von 0930 in time ... 0930 in double wird als 930 value behandelt, während 0930 in time behandelt wird als 09:30 for more beispiel, 0999 ist in doppelten Werten möglich, während 0999 in time nicht möglich ist. .. zuerst zuerst die Werte im Zeitformat umrechnen dann das Subtrahieren ... hoffe das hilft dir das Problem zu lösen ... – George

Verwandte Themen