einmalige Ausführung eines Methodenabschnittes

Albatrox

Mitglied
Hallo zusammen,

momentan schreibe ich gerade einen Code der minütlich aufgerufen wird. dazu habe ich eine extra Methode die in der Main Methode aufgerufen wird. Es geht um einen variablen Wert, der in der Methode mit einem anderen fixen Wert verglichen wird.

Der fixe Wert ist eine Art Grenzwert, die Abfrage soll jetzt sein: falls der Grenzwert überschitten ist, dann "Methodenaufruf einer anderen Methode" falls Grenzwert nicht überschitten dann "anderer Methodenaufruf".
kurzes bsp:
Java:
public static void testmethode(...){
if(variablerWert > grenzWert) "Methodenaufruf1"
if(variablerWert < grenzWert) "Methodenaufru2f"
}
Das ist das Grundkonzept. Die variable variablerWert wird jede minute aktualisiert und verändert sich oder bleibt gleich. Jetzt kommt noch eine Bedingung dazu die mir Schwierigkeiten macht.

Falls variablerWert > grenzWert "Methodenaufruf" -> falls der wert in der nächsten Minute größer ist und der Methodenaufruf bereits einmal getätigt wurde dann soll er in dieser "minute" nicht getätigt werden.
Erst wenn der Wert unter den grenzWert sink soll der Methodenaufruf2 stattfinden. Bei dem genau das gleiche wie bei 1. Falls der variablerWert unter dem grenzWert fällt und einige Minuten bleibt soll der Methodenaufruf nur einmal, genau beim ersten unterschreiten des grenzWert stattfinden und dann nicht mehr, bzw erst wenn der grenzWert wieder überschritten wurde.

Ich hoffe ich habe es einigermaßen verständlich ausdrücken können. Falls noch Fragen sind bitte schreiben.

Mein bisherige Ansatz war eine weiter Bedingung in der if-Anweisung in Form eines booleans, allerdings hat das nicht funktioniert, da durch die initialisierung immer wieder der Wert auf true gesetzt wurde.
kurzes Beispiel:
Java:
public static void testmethode(double variablerWert, double grenzWert, boolean bedingung){
if(variablerWert > grenzWert && bedingung == true) 
"Methodenaufruf1"
bedingung = false
if(variablerWert < grenzWert && bedingung == false) 
"Methodenaufru2f"
bedingung = true
}

Zur Verdeutlichung habe ich noch kurz ein kleines bildchen gezeichnet, entschuldigt bitte meine Zeichenkünste 😀

Vielen Dank schonmal
Gruß Albatrox
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    12,6 KB · Aufrufe: 36
Code:
boolean unterGrenzwert = false;

if(variablerWert > grenzwert && unterGrenzwert){
    methode1();
    unterGrenzwert = false;
} else if (variablerWert < grenzwert && !unterGrenzwert){
    methode2();
    unterGrenzwert = true;
}

Ungefähr so?
Anmerkung: Es fehlt die Behandlung, wenn der Grenzwert gleich dem variablen Wert ist. Wie du die boolsche Variable initialisierst, musst du dir auch noch mal überlegen.
 
Dein Problem ist, dass Java Variablen immer mit Call-Per-Value übergibt. Daher bringt es nichts in der Methode die Variable "bedingung" zu verändern.

Du kannst nun einfach deiner Methode einen Boolean-Rückgabewert verpassen und "bedingung" als Ergebnis zurückzugeben. ==> return bedingung;

Die andere, unsaubere Möglichkeit wäre die Variable "bedingung" als statische, globale Variable zu deklarieren und sie nicht als Parameter zu übergeben. Das sollte man aber nur bei kurzen Programmen machen, da man sonst sehr schnell die Übersicht über das eigene Programm verliert.
 
Also wenn Du etwas nur einmal jede Minute ausführen willst, dann musst Du den letzten Zeitstempel speichern.

Also ein einfacher "Wrapper" mit der gleichen Signatur wie die eigentliche Methode - nur der Name muss verändert sein.

Also wenn Du hast:
public void someMethod();

Dann wird das halt
Code:
public void someMethodWrapper() {
  // Prüfung lastRunTime auf == null oder ob die Zeitdifferenz > 1 min ist
  // ==> lastRunTime auf aktuelle Zeit setzen
  // ==> someMethod() aufrufen
}
Und in die Klasse kommt lastRunTime als Instanzvariable.

Sollten die Funktionen static sein, dann ist lastRunTime auch static.

Und schon wird diese Methode nur noch 1 mal pro Minute aufgerufen.
 

Neue Themen


Zurück
Oben