Frage zu Java: if Abfrage?
Erstes Problem gelöst, und jetzt habe ich direkt noch eine Frage. Vielleicht kann jemand helfen. Ich habe in meinem Code eine Abfrage für ein Passwort.
Scanner sc = new Scanner(System.in);
String pw = "Test";
System.out.println("Passwort?");
String req = sc.next();
if(req.equals(pw)) {
System.out.println("Passwort richtig");
}
else {
System.out.println("Passwort falsch");
}
Meine Frage ist, wie kann ich die if-Abfrage so umschreiben, dass ich mehrere bzw. unterschiedliche Bedingungen abfragen kann.Also, dass "if" in dem Beispiel nicht nur die Zeile System.out.println("Passwort richtig") ausführt wenn req gleich wie pw ist, sondern auch wenn req z.B gleich wie pw2 und pw3 ist.
Dass ist noch unverständlicher erklärt als meine vorherige Frage, aber vielleicht kann mir trotzdem jemand helfen.
Am Anfang des Codes steht, damit das mit dem Scanner funktioniert:
import java.util.Scanner;
Ich benutze immernoch Java JRE 17.0.7
4 Antworten
Ja, das geht mit logischen Operatoren
if (req.equals(pw) && req.equals(pw2) && req.equals(pw3)) {
}
Dann geht er erst in den Block, wenn alle mit && verknüpften Bedingungen erfüllt sind.
🤷♂️ Der Fragesteller wollte wissen, wie es theoretisch geht. Den Sinn kennt der FS allein. Kann aber auch sein, dass ich ihn falsch verstanden habe und er jeweils einen Branch für jeden Fall haben möchte. Dann wärs so wie:
if (req.equals(pw)) {
// req = pw
} else if (req.equals(pw2)) {
// req = pw2
} else if (req.equals(pw3)) {
// req = pw3
} else {
// was anderes
}
Nö, du hast die Frage falsch verstanden. Lies sie noch mal durch und denk nach wie er es meinen könnte…
Was er will ist dieses if - else if - else if, aber mit nur einem Branch für alle.
Danke. Weißt du zufälligerweise auch, wie ich das umschreiben muss, dass nur eine Bedingung war sein muss?
Es gibt mehrere Möglichkeiten, je nach Situation:
Du prüfst mit einem logischen oder ||, also z.B. condition1 || condition2 liest man als condition1 oder condition2 und wenn auch nur eine true ergibt wird die expression zu true evaluiert.
Nested If Statements, du kannst in einem if block auch andere if Statements haben, wird aber irgendwann unübersichtlich und ergibt auch nur Sinn wenn du Code hast der immer ausgeführt werden soll wenn die erste condition true ergibt und Code der nur ausgeführt werden soll wenn die zweite Condition true ergibt.
In so einem Fall könnte ein Switch Statement funktionieren, da kannst du mehrere Werte angeben die mit einem Ursprungswert verglichen werden.
Ansonsten ergibt es Sinn die Werte nicht zu hardcoden über If Statements, sondern einfach eine Liste zu nutzen und zu prüfen ob der richtige Wert in der Liste ist, über eine Loop oder eine Funktion die über die Liste geht. So kannst du dynamisch andere Werte hinzufügen und dein Code bleibt der selbe egal mit wie vielen Werten du vergleichst, daher wäre das die sauberste Lösung.
Bei Passwörtern spezifisch hast du auch Sicherheitsprobleme, beispielweise wenn du die Passwörter in den Code schreibst könnte man eventuell über eine utility wie Strings das Passwort aus der Programmdatei in wenigen Sekunden extrahieren.
Danke für die genaue Erklärung. Das mit dem auslesen des Passworts ist bei mir im Moment kein Problem, da ich dass nur zum Spaß programmiere und nicht mit der Absicht zum veröffentlichen oder ähnliches.
if (req.equals(pw) || req.equals(pw2) || req.equals(pw3))
Also wenn ich das jetzt richtig verstehe, möchtest du mehrere IF-Bedingungen in einer Schleife.
In der Doku gibt es dazu eine Erklärung
else if
Damit kannst du eine IF-Bedingung an eine Else-Bedingung heften und so in einer schleife mehrere "Wenn"-Fälle abfragen.
Schau mal hier
Edit: Du kannst auch in einer If-Abfrage mehrere Bedingungen verketten (und, beides muss erfüllt sein). Das geht mit
&&
Das Edit ist in dem Fall falsch, && ist eine UND Verknüpfung, durch else erreicht man aber ein ODER. Vermutlich meintest du ||.
Das ergibt keinen Sinn, warum und in welcher Situation sollten alle 3 Passworte gleich sein?