Passwort Checker2

JavaBeginner22

Aktives Mitglied
Hallo kann mir jemand bitte erklären was in mein Code nicht stimmt, es ist ein passwort checker. Wenn ich klein Buchstaben , Großbuchstaben und Zeichen eingebe dann soll ein starkes Passwort angezeigt werden. Das ist der Fall bei mein Code, aber nicht immer. zbs es wird manchmal anstatt von stark ein ok passwort gezeigt, obwohl ein ok passwort nicht diese anforderu
Java:
  String[] kleinBuchstaben={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","u","w","x","y","z"};
    String[] zeichen={"1","2","3","4","5","6","7","8","9","!","§","$","%","&","/","=","?"};
    String[] gut={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q", "R" ,"S", "T" ,"U", "V", "W" ,"X" ,"Y" ,"Z"};
 
for(String kleinbuchstaben1:kleinBuchstaben){
              for(String paketgut:gut){
              for(String zeichen1: zeichen){   
        if(txtfield.getText().contains(kleinbuchstaben1)&& txtfield.getText().length()>=8){
     circle.setVisible(true);
    circle.setFill(Color.ORANGE);
    label1.setText("OK");
     }
              
 
          
          
          
      
        if(txtfield.getText().contains(kleinbuchstaben1)&& txtfield.getText().length()<8 ){
     circle.setVisible(true);
   circle.setFill(Color.RED);
     label1.setText("Schwach");
    
   }
    
        
  
         if(txtfield.getText().contains(paketgut)&& txtfield.getText().contains(zeichen1) &&txtfield.getText().length()>=8 ){
     circle.setVisible(true);
     circle.setFill(Color.GREENYELLOW);
      label1.setText("Stark");
      
    
    
    
        
      
      
   }
           if(txtfield.getText().contains(paketgut)&&txtfield.getText().length()>=8 && txtfield.getText().contains(kleinbuchstaben1) )
       {
             circle.setVisible(true);
   circle.setFill(Color.YELLOW);
      label1.setText("Gut");
     }
             }
             }
     }
    }
}
ngen hat.
 

KonradN

Super-Moderator
Mitarbeiter
Sorry, wenn ich es so sage, aber der Algorithmus ist schlicht Murks.

Wieso fängst Du nicht einfach einmal neu an und formulierst erst einmal, wie so eine Prüfung aussehen sollte. Welche Schritte wären notwendig?

oder anders formuliert: Wie gehst Du vor, wenn Du von Hand diese Prüfung durchführen würdest.
 

JavaBeginner22

Aktives Mitglied
Sorry, wenn ich es so sage, aber der Algorithmus ist schlicht Murks.

Wieso fängst Du nicht einfach einmal neu an und formulierst erst einmal, wie so eine Prüfung aussehen sollte. Welche Schritte wären notwendig?

oder anders formuliert: Wie gehst Du vor, wenn Du von Hand diese Prüfung durchführen
mir ist leider nur das eingefallen, aufgrund meiner Anfänger kenntnissen , also mir fällt leider nichts anderes ein
 

KonradN

Super-Moderator
Mitarbeiter
Dann formuliere doch einmal, wie Du vorgehen würdest.

Was machst Du, wenn Du ein Passwort prüfen willst?

Ich gebe Dir ein Passwort: as7hh24
Wie gehst Du vor?
 

KonradN

Super-Moderator
Mitarbeiter
Kannst Du das etwas genauer beschreiben?
Du gehst das Passwort Zeichen für Zeichen durch:
a) Was genau prüfst Du alles?
b) Was machst Du mit den Ergebnissen?

Du bist auf dem richtigen Weg - das musst Du aber noch weiter verfeinern.
 

JavaBeginner22

Aktives Mitglied
Kannst Du das etwas genauer beschreiben?
Du gehst das Passwort Zeichen für Zeichen durch:
a) Was genau prüfst Du alles?
b) Was machst Du mit den Ergebnissen?

Du bist auf dem richtigen Weg - das musst Du aber noch weiter verfeinern.
a) ich prüfe ob es Zeichen, und Großbuchstaben hat , und auch die Länge
b) Wenn es Zeichen und Großbuchstaben hat, dann ist es ein starkes Passwort.
Wenn nicht, dann schwaches Passwort , wenn die Länge kleiner als 8 ist, und wenn die länge größer als 8 ist ein OK Passwort
 

KonradN

Super-Moderator
Mitarbeiter
Also hast Du die Aufgabe jetzt etwas aufgeteilt:

Zum einen musst Du nun beschreiben, wie Du die Prüfungen in a machen kannst.

Zum anderen musst Du die Logik in b genau aufgliedern (Die Beschreibung scheint noch nicht ganz korrekt zu sein, aber das nur am Rande).

Also zuerst den ersten Punkt: Wie prüfst Du, ob das Passwort "Zeichen" hat (Hier sollte man ggf. die Bezeichnung etwas anpassen. Ziffern und Sonderzeichen sind da ja drin, oder?) Das Vorgehen kannst Du auch wieder erst beschreiben. Stell Dir bei so Beschreibungen vor, dass es jemand machen soll, der die Aufgabe nicht kennt. Und Du musst Anweisungen schreiben, dass er zu dem richtigen Ergebnis kommt. Das Kernproblem ist halt, dass Du im Programm alles genau formulieren musst. Und da wird die Beschreibung eigentlich 1:1 umsetzen wollen in Code muss die auch deutlich genauer sein.

Was da auch helfen kann, ist es mit Stift und Papier durchzuspielen.

Du hast also auf einem Zettel:
as7hh24
"1","2","3","4","5","6","7","8","9","!","§","$","%","&","/","=","?"
Was machst Du, um heraus zu kriegen, ob das Passwort Elemente aus dem Array hat?
 

JavaBeginner22

Aktives Mitglied
Also hast Du die Aufgabe jetzt etwas aufgeteilt:

Zum einen musst Du nun beschreiben, wie Du die Prüfungen in a machen kannst.

Zum anderen musst Du die Logik in b genau aufgliedern (Die Beschreibung scheint noch nicht ganz korrekt zu sein, aber das nur am Rande).

Also zuerst den ersten Punkt: Wie prüfst Du, ob das Passwort "Zeichen" hat (Hier sollte man ggf. die Bezeichnung etwas anpassen. Ziffern und Sonderzeichen sind da ja drin, oder?) Das Vorgehen kannst Du auch wieder erst beschreiben. Stell Dir bei so Beschreibungen vor, dass es jemand machen soll, der die Aufgabe nicht kennt. Und Du musst Anweisungen schreiben, dass er zu dem richtigen Ergebnis kommt. Das Kernproblem ist halt, dass Du im Programm alles genau formulieren musst. Und da wird die Beschreibung eigentlich 1:1 umsetzen wollen in Code muss die auch deutlich genauer sein.

Was da auch helfen kann, ist es mit Stift und Papier durchzuspielen.

Du hast also auf einem Zettel:
as7hh24
"1","2","3","4","5","6","7","8","9","!","§","$","%","&","/","=","?"
Was machst Du, um heraus zu kriegen, ob das Passwort Elemente aus dem Array hat?
mithilfe einer for schleife kann ich die einzelnen Zeichen durchlaufen lassen, also etwa so for(int i=0; i<zeichen.length; i++) , dann mach ich eine andere for schleife für mein eingegebenes Passwort also for(int j=0; j<txtfield.getText.length; j++) , und wenn an der stelle j mein Passwort Zeichen enthält, dann ist es ein Starkes Passwort, und das mache ich auch für Großbuchstaben


ich habe es bis jetzt versucht und komme auf diese Logik leider nur erstmal mit Großbuchstaben
Java:
    for(int j=0; j<txtfield.getText().length(); j++){
    for(int i=0; i<abc.length(); i++){
 
    if(txtfield.getText().charAt(j)== abc.charAt(i)){
    circle.setVisible(true);
    circle.setFill(Color.GREENYELLOW);
    label1.setText("Starkes Passwort");
    }
    
    }
 
Zuletzt bearbeitet:

Neumi5694

Top Contributor
mithilfe einer for schleife kann ich die einzelnen Zeichen durchlaufen lassen, also etwa so for(int i=0; i<zeichen.length; i++) , dann mach ich eine andere for schleife für mein eingegebenes Passwort also for(int j=0; j<txtfield.getText.length; j++) , und wenn an der stelle j mein Passwort Zeichen enthält, dann ist es ein Starkes Passwort, und das mache ich auch für Großbuchstaben


ich habe es bis jetzt versucht und komme auf diese Logik leider nur erstmal mit Großbuchstaben
Java:
    for(int j=0; j<txtfield.getText().length(); j++){
    for(int i=0; i<abc.length(); i++){
 
    if(txtfield.getText().charAt(j)== abc.charAt(i)){
    circle.setVisible(true);
    circle.setFill(Color.GREENYELLOW);
    label1.setText("Starkes Passwort");
    }
 
    }
Welche Schleifen du brauchst, sollte der letzte deiner Gedanken sein, wenn du danach gefragt wirst, wie du's auf dem Zettel machen würdest.

Bleib mal bei EINEM Zeichen, vergiss mal das komplette Wort.
Erstelle eine Methode, die prüft, worum es sich handelt. Am Besten erstellst du hierfür als Rückgabewert für die Methode erstmal ein Enum mit den verschiedenen Möglichkeiten: Großbuchstabe, KleinBuchstabe, Ziffer, Ungültig.
Du kannst das anhand der Vergleiche mit deinen Arrays machen oder die Methoden der Klasse Character nutzen, die dir sagen, worum es sich handelt. Deine Sache. Aber erstell erst mal eine Methode, die genau das macht.
 
Zuletzt bearbeitet:

Neumi5694

Top Contributor
Noch ein codetechnischer Tip, falls du nicht die Methoden der Klasse Character verwenden willst (eigentlich zwei, aber der erste ist obsolet, nachdem du den zweiten gelesen hast)
1. Ein Array aus Chars kriegst du auch, in dem du dir das CharArray eines Strings geben lässt.
Java:
char[] arrayOfDigits = new String("0123456789").toCharArray();

2. Du kannst auch direkt im String nach dem Zeichen suchen
Code:
String theseAreDigits = "0123456789";
boolean thatCharIsADigit = theseAreDigits.indexOf(c) >=0;

Und siehe da ... schon brauchst du keine Schleife mehr und verzettelst dich weniger leicht.
 

KonradN

Super-Moderator
Mitarbeiter
Das, was ich bei sowas immer etwas erwarte, sind die Abläufe im Detail.

Da sind dann Prüfungen wie: "Ist ein großer Buchstabe enthalten?", die im ersten Ablauf enthalten sind.

Diese kann man dann weiter aufgliedern. Ist ein großer Buchstabe enthalten wird dann schnell zu einem:
- Prüfe jeden Buchstaben des Passwortes:
---> Wenn es ein großer Buchstabe ist, dann gib direkt Ja zurück.
- Gib nein zurück.

Die Formulierung ist hier jetzt etwas problematisch, da die Bedingung leicht verschleiert wird (finde ich). Wenn man etwas Übung hat, dann schreibt man sowas direkt mehr in einem "Code Style". Aber wir erkennen dennoch: In dem haben wir schon wieder eine nicht triviale Bedingung: Ist ein Zeichen ein großer Buchstabe?

Also müssen wir das auch noch aufdröseln:
- Ist das Zeichen in dem Array "gut" (Immer auf gute Bezeichner achten!) enthalten?

Ist ein Zeichen in einem Array enthalten?
- Für jedes Zeichen aus dem Array:
---> Wenn dass Zeichen aus dem Array gleich dem übergebenen Zeichen ist, dann gib ja zurück
- gibt nein zurück

Das kann man so weiter führen.
Was aber deutlich wird: Jede der Methoden ist in sich einfach und leicht überschaubar. Dadurch ist diese leicht zu schreiben (und dann auch wieder leicht zu lesen und zu verstehen).
Die Komplexität nimmt massiv ab und die Lösung kann schnell erarbeitet werden.

Man erkennt hier auch: Ja, es gibt verschachtelte Schleifen, aber jede ist für sich einfach gehalten. So gibt es dann auch keine Probleme mit Prüfungen. Klar - man kann die beiden Schleifen auch direkt schreiben. Aber es bleibt die Trennung, die notwendig ist zwischen den Prüfungen und der Auswertung.
 

Ähnliche Java Themen

Neue Themen


Oben