Java long- in int-Variable umwandeln

  • Themenstarter Themenstarter Gelöschtes Mitglied 82461
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 82461

Gast
Hi ihr lieben,
wie wandelt man eine long in eine int Variable um?

Hintergrund:


ich will mir per if-Schleife die verstrichene Zeit ermitteln. Dafür frage ich die [I][B]System.currentTimeMillis()[/B][/I] bei Programmstart ab und immer wenn ich die bis dahin verstrichen Programmlaufzeit wissen will, nochmal. Das ganze subtrahiert und zack.
Da System.currentTimeMillis() jedoch eine long Variable beschreibt, und eine if-Schleife für die Abfrage eine int-Variable benötigt, muss ich das irgendwie umwandeln. Aber wie?
Denn int intZahl= (int) longZahl; macht irgendwas und schmeißt meiner Logik nach für die hinteren Zeichen einfach die vorderen raus...

Auch habe ich es bereits mit int longToIntZahl = Math.toIntExact(longZahl); versucht, da kann ich aber auch nur eine long-Variable bis zu einer Zeichenlänge, welche ich auch direkt in eine int-Variable packen kann, benutzen, anderfalls kommt: Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException: integer overflow... 😕

Sämtliches gegoogle hat mir bisher auch nicht geholfen, such aber mal weiter und hoffe auf eine problemlösende Antwort.

Vielen Dank und liebe Grüße in Voraus


PS: Gibt es eine elegantere Lösung, um die verstrichene Zeit zu ermitteln, als mit dieser if-Konstruktion?
PPS: Ich habe versucht die Frage mit meinem Wissen so gut wie möglich zu schildern, darum bitte ich nicht alzu viel zu lachen, falls es etwas verwirrt klinkt (->konstruktive Kritik)
 
und eine if-Schleife für die Abfrage eine int-Variable benötigt
Nein, tut sie nicht.

PS: Gibt es eine elegantere Lösung, um die verstrichene Zeit zu ermitteln, als mit dieser if-Konstruktion?
Du hast leider deine "if-Konstruktion" nicht beschrieben...

Ich verwende immer System.nanoTime, sowas:

Java:
long start = System.nanoTime();

// Operation

long end = System.nanoTime();
long duration = end - start;

System.out.println("Dauer: " + Double.toString(duration / 1000l / 1000d) + "ms");

Da System.currentTimeMillis() jedoch eine long Variable beschreibt, und eine if-Schleife für die Abfrage eine int-Variable benötigt, muss ich das irgendwie umwandeln. Aber wie?
Wieos willst du mit der Zeit eine Schleife machen? Was genau hast du vor?
 
Da System.currentTimeMillis() jedoch eine long Variable beschreibt, und eine if-Schleife für die Abfrage eine int-Variable benötigt

Von dem Fauxpas mit dem if-Statement mal abgesehen: Du kannst ein long relativ problemlos zu einem int casten.
Java:
long l = 777;

int i = (int)l; //i = 777

Relativ insoweit, als daß du ein Problem bekommst wenn der Wert, den du in das arme Integer quetschen willst, über den für Integer definierten Wertebereich hinaus geht.

Das if-Statement verlangt allerdings kein Integer zu verarbeiten, sondern ein Boolean. Es kann nichts anderes als ein Boolean – oder einen äquivalenten Ausdruck – verarbeiten. Irgendwas, was halt wahr oder falsch zurückliefert. Ein Vergleich wie "Das Integer i ist größer als das Long l" ist so ein boolscher Ausdruck.

Jetzt bleibt die Frage: Warum mußt du ein Long zu einem Integer casten? Kannst du für den Vergleich nicht den anderen Weg gehen und das Integer zum Long casten? Dann bekommst du keine Probleme mit dem Wertebereich. Oder, falls es eine Vergleichskonstante ist, das Integer gleich als Long deklarieren.

PS: Gibt es eine elegantere Lösung, um die verstrichene Zeit zu ermitteln, als mit dieser if-Konstruktion?
Das kommt darauf an, was du vorhast. Wenn du regelmäßig ein Ereignis auslösen möchtest, könntest du dir auch mal Timer und TimerTask ansehen.
 
Erstmal vielen Dank für eure Hilfe!!!
Meine if-ABFRAGE soll ein jLabel befüllen, welches in einem Quiz die Antwortzeit runter zählt. Also im sekunden Takt von 5 bis 0, wenn man in dieser Zeit nicht eine Antwort anwählt, hat man die Frage verpasst und bekommt keinen Punkt. Dafür muss ich wissen, wieviel Zeit seit Erscheinen der Frage vergangen ist, was ich mit der if-Abfrage mache.
Ich weiß auch tatsächliche gerade nicht mehr so genau, wie ich auf das mit dem Integer kam... habe es jetzt mit System.nanoTime "gelöst". Das sieht aber seht unelegant aus.
Ich schau mir mal Timer und TimerTask an
 
Manchmal seh ich den Wald vor lauter Bäumen nicht!!!😇
Bin über Timer nach LocalDateTime und Duration gekommen. Das sieht ja viel schöner aus, und funktioniert deutlich schneller.

Vielen Dank euch allen nochmal!!!
 

Neue Themen


Zurück
Oben