Abbruch einer Schleife mit break, meine Übung funktioniert nicht richtig

Cepheus

Mitglied
Der Verfüger muss spätestens nach dem 3. Versuch das richtige Passwort eingeben, ansonsten wird er gesperrt. Mein Code funktioniert richtig, wenn der Benutzer nach der ersten oder nach der zweiten Eingabeaufforderung das richtige (oder ein fasches) PW eingibt, aber nicht, wenn er im 3. Versuch das falsche PW eingibt.

Ich bitte um eine Lesung des Codes und um einen Korrekturvorschlag.
Mit freundlichen Grüßen,
Cepheus
 

Anhänge

Bitte Code immer in Code-Tags angeben und nicht als Anhang. Das vereinfacht es Allen, den Code direkt zu lesen (Gerade auf Smartphone / Tablet)

Um Code in Code-Tags zu posten nutzt man am einfachsten den Knopf </> links oberhalb des Eingabebereiches.

Das sieht dann in Deinem Fall so aus:


Java:
package de.sim.wh.pw;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Passwortabfrage {
    public static void main(String[] args) throws IOException {
        String s1 = "Bitte geben Sie Ihr Passwort ein";
        String s2 = "Nach 3 Falscheingaben wird der Verfüger gesperrt!";
        
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        
        boolean passwortRichtig = false;
        for (int i = 0; i < 3; i++) {
            System.out.println( i==0 ? s1 : (s2 +"\n" +s1) );
            String passwort = in.readLine();
            if ( pruefePasswort(passwort) ) {   // Das eingegebene PW ist richtig
                passwortRichtig = true;
                break;  // daher PW-Eingabe nicht mehr auffordern
            }
        }
        // Das Ergebnis ausgeben
        if (passwortRichtig = true) {
            System.out.println("Richtiges Passwort wurde eingegeben.");
        } else {
            System.out.println("Passwort falsch. Der Verfüger wird gesperrt.");
        }
    }
    
    static boolean pruefePasswort(String passwort) {
        String pw = "Rom";
        if (pw.equals(passwort)) {
            return true;
        }
        return false;
    }
}
 
Nur als Hinweis:
Die Methode pruefePasswort tut zwar was sie soll - man würde das aber niemals so schreiben:
Java:
    static boolean pruefePasswort(String passwort) {
        return "Rom".equals(passwort);
    }
Die equals-Methode gibt schon boolean als Ergebnis zurück - man muss also nicht erst das Ergebnis auswerten und dann ein neues Ergebnis erstellen und zurückgeben.

Genauso funktioniert das für if-else:
Java:
// unleserlich, umständlich, unnötig
if (passwortRichtig == true) {
    //-> ...
} else {
    //-> ...
}

// besser
if (passwortRichtig) {
    //-> ...
} else {
    //-> ...
}
 

Neue Themen


Zurück
Oben