Variable in if initialisieren

Adolf

Mitglied
Ich habe eine Frage, und zwar, weiß jemand, wenn ich eine if schleife mache, und dann aus der Schleife das richtige auf eine double Variable initialisieren muss? Also den richtigen Wert auf die double Variable initialisieren?
Danke im Voraus.
 

Es gibt keine If-Schleifen!

Ansonsten fehlen Informationen. Weiß der Variablen den richtigen Wert in der If-Bedingung zu. Deine Frage ist dazu zu unkonkret, liefere am besten mal Beispielcode wo es genau klemmt.
 
Man könnte sich ja ein kleines Beispiel konstruieren:
Java:
public class if_Abfrage {
    public static void main (String[] args) {
       
        for (int i=0; i< 4; i++){
            if (i == 2) {
               double d = 4.2;
               System.out.println("d enthält " + d);
            }
        }
    }
}
...es scheint jedenfalls zu funktionieren.
 
Oh Tut mir leid. Meine Eigentliche Frage ist:


if ((resultJump1 > resultJump2) && (resultJump2 > resultJump3))
{
result = resultJump1 + resultJump2;
}else if((resultJump2 > resultJump3) && (resultJump3 > resultJump1))
{
result = resultJump2 + resultJump3;
}else if((resultJump3 > resultJump1) && (resultJump1 > resultJump2))
{
result = resultJump3 + resultJump1;
}
double result;

return result;

Wie kann ich hier die double Variable so initialisieren, damit sie dann den Result ausgibt, der Zustimmt?
 
Zuletzt bearbeitet:
Also das ist in meinen Augen Code, der schwer zu lesen ist. Was macht der Code? Du willst die Summe der beiden größten Zahlen haben?

Wäre da eine Logik wie diese hier nicht evtl. lesbarer:
Java:
double result = Math.max(resultJump1+resultJump2, resultJump1+resultJump3);
result = Math.max(result, resultJump2+resultJump3);
return result;

Das aber nur als kleine Anregung weil es mir so beim Lesen durch den Kopf ging.
 
Java:
double result;
       
        if ((resultJump1 > resultJump2) &&  (resultJump2 > resultJump3))
        {
            result = resultJump1 + resultJump2;
        }else if((resultJump2 > resultJump3) &&  (resultJump3 > resultJump1))
        {
            result = resultJump2 + resultJump3;
        }else if((resultJump3 > resultJump1) &&  (resultJump1 > resultJump2))
        {
            result = resultJump3 + resultJump1;
        }
       
        return result;

Ja schon, aber wenn ich die Variable result oben deklariere, muss ich sie trotzdem Initialisieren. Es kommt unten bei return result, dass ich die Variable initialisieren muss...
 
Zuletzt bearbeitet von einem Moderator:
Ja schon, aber wenn ich die Variable result oben deklariere, muss ich sie trotzdem Initialisieren. Es kommt unten bei return result, dass ich die Variable initialisieren muss...
Ja, dann mach das doch einfach, z.B. double result = 0; oder was auch immer du als sinnvollen Initialwert ansiehst. Diesen Wert hat am Ende die Variable, wenn keine deiner if-Bedingungen erfüllt ist (und damit den Wert neu setzt).
 
Eine Variable muss am ende einen Wert haben.

Wenn du if-Bedingungen schreibst musst du entweder:
* Der Variablen einen default-Wert vor den If-Bedinungen setzen
* einen else Block in dem du die Variable auf einen default Wert setzt (Oder wenn der nicht auftreten darf, dort eine Exception wie eine IllegalStateException werfen)
* Die Bedingungen so Formulieren, dass der Compiler überprüfen kann, dass garantiert immer eine Bedingungen zutrifft (Dann kann man die letzte Bedingung aber auch als else schreiben)
 
Wenn resultJump1 größer als die beiden anderen Werte ist, dann addierst du 2 mal resultJump1.
Was meinst Du bitte?

Der Autor addiert immer die zwei größten Werte.
a >b && b>c ==> a+b

Aus a > b und b > c resultiert auch:
a+b > b+c ==> -b auf beiden Seiten: a > c
a+b > a+c ==> -a auf beiden Seiten: b > c

Daher wird die größte der drei Summen genommen: a+b, a+c und b+c

Daher ist es ein einfaches
return Math.max(a+b, Math.max(a+c, b+c));
oder eben als drei Zeilen geschrieben ... wobei die dritte Zeile unnötig scheint und ein

Java:
double result = Math.max(resultJump1+resultJump2, resultJump1+resultJump3);
return Math.max(result, resultJump2+resultJump3);

nicht wirklich unleserlicher ist. Der Name der Variable result könnte aber noch umbenannt werden denn es ist ja nicht mehr das Ergebnis, das dort gespeichert / aufgebaut wird.
 
Also wir haben 3 Werte, wenn zwei Werte gleich sind, aber der 3. Wert kleiner ist, sollen die zwei gleichen addiert werden. Wenn jetzt Zwei Werte gleich sind, aber der 3. Wert größer, soll einer von den zwei gleichen mit dem größerem addiert werden.
 
Also wir haben 3 Werte, wenn zwei Werte gleich sind, aber der 3. Wert kleiner ist, sollen die zwei gleichen addiert werden. Wenn jetzt Zwei Werte gleich sind, aber der 3. Wert größer, soll einer von den zwei gleichen mit dem größerem addiert werden.
Also: es sollen die zwei größten Werte addiert werden?
 
Was meinst Du bitte?

Der Autor addiert immer die zwei größten Werte.
a >b && b>c ==> a+b

Aus a > b und b > c resultiert auch:
a+b > b+c ==> -b auf beiden Seiten: a > c
a+b > a+c ==> -a auf beiden Seiten: b > c

Daher wird die größte der drei Summen genommen: a+b, a+c und b+c

Daher ist es ein einfaches
return Math.max(a+b, Math.max(a+c, b+c));
oder eben als drei Zeilen geschrieben ... wobei die dritte Zeile unnötig scheint und ein

Java:
double result = Math.max(resultJump1+resultJump2, resultJump1+resultJump3);
return Math.max(result, resultJump2+resultJump3);

nicht wirklich unleserlicher ist. Der Name der Variable result könnte aber noch umbenannt werden denn es ist ja nicht mehr das Ergebnis, das dort gespeichert / aufgebaut wird.
Ja, dein Anhang hätte gepasst, leider musste ich dann noch einen Code schreiben, wo ich das oben erwähnte machen musste, aber ansonsten hätte es gepasst.
 
Ja, und wenn zwei werte gleich sind, dann der eine und der größere Wert
Dann solltest Du die > in >= umwandeln. Sobald zwei Werte gleich sind, wird keine der drei if Bedingungen erfüllt und result wird nicht gesetzt.

Daher wird entweder der Compiler meckern wenn Du nur etwas hast wie:
Java:
double result;
if (..) {
    result = ...
} else if (..) {
    result = ...
} else if (..) {
    result = ...
}
return result;
weil result im return verwendet wurde aber nicht garantiert ist, dass Du einen Wert zugewiesen hast.

Den Compiler kann man ruhig stellen mit einer Zuweisung bei der Deklaration, aber das willst Du ja nicht... liefert falsche Ergebnisse! Wenn a = b = c = 1.0 ist und Du result z.B. auf 0 setzt, dann würde ja 0 zurück gegeben. Aber das Ergebnis ist natürlich 1.

Edit: Noch das "das willst Du ja nicht" so korrigiert, das klar ist, dass keine richtige Lösung raus kommen würde!
 
Zuletzt bearbeitet von einem Moderator:
Ja, dein Anhang hätte gepasst, leider musste ich dann noch einen Code schreiben, wo ich das oben erwähnte machen musste, aber ansonsten hätte es gepasst.
Nein, du hättest gar nichts mehr machen müssen. Bei Deinem Code mit den > gibt es noch Probleme. Bei meiner max Lösung interessiert es nicht.

Die Alternative wäre, die if / else anders zu verschachteln:
Java:
if (a > b) {
    if (b > c) {
        return a+b;
    } else {
        return a+c;
    }
} else {
    if (a > c) {
        return b+a;
    } else {
        return b+c;
    }   
}

Jetzt gibt es keinen Fall mehr, bei dem nichts durchlaufen ist und man muss auch keinen >= abprüfen. Wenn a==b ist, ist ja egal, ob der if oder der else zweig durchlaufen wird (und dann entweder a oder b genommen wird).

Das ist ansonsten übrigens nichts anderes als das verschachtelte Max., denn ein max wird ja berechnet über:
Java:
if (a > b) {
    return a;
} else {
    return b;
}
 
Also wir haben 3 Werte, wenn zwei Werte gleich sind, aber der 3. Wert kleiner ist, sollen die zwei gleichen addiert werden. Wenn jetzt Zwei Werte gleich sind, aber der 3. Wert größer, soll einer von den zwei gleichen mit dem größerem addiert werden.
Ist mir etwas entgangen? Genau das macht doch der Code von @kneitzel, er summiert die beiden größten Werte.
Java:
public class Main {

    public static void main(String[] args) {
        System.out.println(sumMax(1, 2, 3)); // 5
        System.out.println(sumMax(2, 1, 3)); // 5
        System.out.println(sumMax(3, 2, 1)); // 5
        System.out.println(sumMax(2, 2, 3)); // 5
        System.out.println(sumMax(3, 2, 2)); // 5
        System.out.println(sumMax(2, 3, 2)); // 5
        System.out.println(sumMax(3, 2, 3)); // 6
        System.out.println(sumMax(2, 3, 3)); // 6
        System.out.println(sumMax(3, 3, 2)); // 6
    }

    public static int sumMax(int a, int b, int c) {
        return Math.max(a + b, Math.max(a + c, b + c));
    }
}
 
Zuletzt bearbeitet:

Zurück
Oben