Zielwertsuche

Fohnbit

Top Contributor
Hallo,

ich stehe vor einem Problem:
Ich habe 3 Variablen, die jeweils eine min/max Wert haben dürfen. Wenn ein Wert verändert wird, muss geprüft werden ob die anderen noch im Bereich liegen und wenn nicht, diese abändern:

long leaseTime (min = 10, max = 600)
long maximalTime (min = 0, max =100 oder (leaseTime - sleepTime) - 5)
long sleepTime (min = 0.1, max = (leaseTime - maximalTime) - 5)

Ausgangswerte:
leaseTime = 600
maximalTime = 10
sleepTime = 0.5

Wenn nun leaseTime auf 10 gesenkt wird, muss:
maximalWert = 10 - 0.5 - 5 = 4.5

Wenn nun aber sleepTime selbst 10 war, habe ich das Problem:
maximalWert = 10 - 10 - 5 = -5

Dann wiederrum soll sleepTime bis auf 0.1 reduziert werden .. .wenn immer noch zu große, soll dann maximalTime reduziert werden, bis die Grenzen wieder eingehalten werden.

Wie kann man das im Code abbilden?

ich bräuchte ja eine Art Zielwertsuche, oder?

Danke!
 

Tiding

Aktives Mitglied
Ich nehme mal an du meinst mit maximalWert -> maximalTime ?
Wenn maximalTime bei einer "Senkung" von leaseTime auf 10 nun mit der Abhängigkeit "leaseTime - sleepTime - 5 unter dein definiertes Minimum fällt, soll dann leaseTime entsprechend abgeändert werden, oder sollen die Grenzen für maximalTime neu gesetzt werden?
Ein detailiertes Beispiel deines Problems unter Umständen auch mehr Informationen über deine Rechnungen wären ganz hilfreich :eek:.
Ich verstehe nämlich nicht so recht was du da bezwecken willst..
Also was genau willst du wie modifizieren?
 

Fohnbit

Top Contributor
Hallo,

ich denk so klappt das:

getProperty ... liefert den Wert des Userfeld
updateProperty ... schreibt in das Userfeld
onProperty ... bekommt den Wert, wenn ein User in das Feld schreibt

Es sollen bei 3 Felder die Grenzwerte eingehalten werden.
LeaseTime is das wichtigste.

Wenn eine Benutzereingabe einen Grenzwert über- oder unterschreitet, sollen die Werte verringert werden.
Als erstes sleepTime wenn nötig ... als zweites maximalTime.

Grenzen wie schon beschrieben:
leaseTime: min = 10, max = 600
maximalTime: min = 0, max = 100 (oder die Summe von maximalTime + sleepTime + 5)
sleepTime: min = 100, max = (leaseTime - maximalTime - 5)

Java:
    public void onPropertyLeasetime(int leasetime) {
        leasetime = leasetime * 1000;

        if (leasetime > (600 * 1000)) {
            updatePropertyLeasetime(600);
            leasetime = 600000;
        } else if (leasetime < (10 * 1000)) {
            leasetime = 10000;
            updatePropertyLeasetime(10);
        }

        if ((leasetime - 5000) < (getPropertyMaximaltime() * 1000 + getPropertySleeptime())) {
            // Maximaltime + Sleeptime zu hoch
            if ((leasetime - 5000) < (getPropertyMaximaltime() * 1000 - 100)) {
                // Maximaltime - minmale Sleeptime immer noch zu hoch:
                updatePropertySleeptime(100);
                updatePropertyMaximaltime((leasetime - 5000 - 100) / 1000);
            } else {
                // nur reduzieren der Sleeptime reicht
                updatePropertySleeptime((leasetime - 5000 - getPropertyMaximaltime() * 1000));
            }

        }
    }

 
    public void onPropertyMaximaltime(int maximaltime) {
        if (((maximaltime * 1000) + getPropertySleeptime()) > (getPropertyLeasetime() * 1000)) {
            updatePropertyMaximaltime((getPropertyLeasetime() * 1000 - getPropertySleeptime()) / 1000 - 5);
        } else if (maximaltime < 0) {
            updatePropertyMaximaltime(0);
        }

    }

  
    public void onPropertySleeptime(int sleeptime) {
        if (sleeptime < 100) {
            updatePropertySleeptime(100);
        } else if ((sleeptime + 1000 + getPropertyMaximaltime() * 1000) > getPropertyLeasetime() * 1000) {
            sleeptime = (getPropertyLeasetime() - getPropertyMaximaltime()) * 1000 - 1000;
            updatePropertySleeptime(sleeptime);
        }

    }
 

Fohnbit

Top Contributor
:) ... nun es gibt 3 User Felder ... wo der User Werte eingeben kann.
Diese 3 Felder haben jeweils Min/Max Werte.
Soweit der einfach Teil.

Aber die Felder stehen auch in Relation zueinander.
Wenn das Feld leaseTime verringert wird, müssen auch die anderen 2 Felder geprüft werden.
Denn die beiden Felder:
maximalTime
sleepTime

dürfen zusammen nicht mehr haben, als das Feld leaseTime.

Daher müssen beide Felder reduziert werden, wenn nötig.
Prio1: leaseTime
Prio2: maximalTime
Prio3: sleepTime
 

Fohnbit

Top Contributor
:) ... weil das so sein muss.

Die Variablen werden für eine TCP Connection genutzt und es gibt Vorgaben, die eingehalten werden müssen.
 

Tiding

Aktives Mitglied
Hm, dann sollte man den Nutzer doch vielmehr darauf hinweisen, dass die Eingabe fehlerhaft war?
Und ihn auffordern sie zu korrigieren.
Naja, da ich kaum über die Details Bescheid weiß halt ich mal lieber den Mund ;).
 

Neue Themen


Oben