Bullet1990
Mitglied
Hi Leute, seit gestern sitze ich an einer Programmaufgabe, in der es gilt ein Passwort, das als char-Array gegeben werden soll, auf seine Sicherheit zu testen. Laut Aufgabe soll es: Mindestens 8 Zeichen lang sein, 2 Buchstaben haben, zwei Ziffern haben, einen Großbuchstaben und einen Kleinbuchstaben enthalten und ein Sonderzeichen.
Mein Problem ist, dass mein Code gemein zu mir ist und mir sagt, dass mein Code "sch***e" ist.

Wobei das Passwort eigentlich ein gut gewähltes ist, und die Kriterien erfüllt. Das muss bedeuten ich hab irgendwo einen Fehler drin, da oben. Ich finde ihn aber nicht...Kann mir einer von euch da weiterhelfen? Hab ich da irgendwo einen Denkfehler drin?
Danke schonmal im Voraus.
MfG
Bullet
Code:
public class Passwort {
static int buchstabenanzahl = 0; //Wert der dann die Anzahl der Buchstaben
//zählen soll also Groß- und Kleinbuchstaben
public static boolean Sonderzeichen (char[] pw){ //Schaut nach ob Array ein Sonderzeichen enthält
char[] sonderzeichen = {'!', '"', '§', '$', '%', '&', '(', ')',
'=', '?', '`', '´', '\\', '}', ']', '[', '{', '*', '+',
'~', '\'', '#', '-', '_', '.', ':', ',', ';', '<', '>',
'|', '°', '^', '@', '€'}; //Char-Array, das alle Sonderzeichen enthält
String checkstring = new String(pw); //das Array konvertiere ich nochmal als String um
boolean zeichen = false; //setze meinen Ergebniswert auf false
for (int i=0;i<sonderzeichen.length;i++){ //hier durchläuft er halt das Array
if (checkstring.indexOf(sonderzeichen[i])>-1){ //und hier soll er alle Elemente durchsuchen
//und gucken, ob ein Sonderzeichen enthalten sind.
zeichen=true; //Wenn also mindestens ein Sonderzeichen drin is soll er mir true liefern
} //mir ist da grad was eingefallen müsste ich eigentlich nochmal abfragen ob der wert da oben
//auch wirklich größer -1 ist?
}return zeichen;} //wenn das Passwort also ein Sonderzeichen enthält soll mir das true liefern
public static boolean Mindestlänge (char[] pw){ //Hier wird halt gecheckt, ob mein
boolean langgenug = false; //Array mindestens 8 Zeichen lang ist
if (pw.length>=8){
langgenug = true;}
return langgenug;}
public static boolean Großbuchstaben(char[] pw){ //Ähnlich wie bei den Sonderzeichen, soll hier
char[] großbuchstaben = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', //nach Großbuchstaben durchsucht werden.
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Ä', 'Ü', 'Ö'};
String checkstring = new String(pw);
boolean uppercase = false;
for (int i=0;i<großbuchstaben.length;i++){
if (checkstring.indexOf(großbuchstaben[i])>-1){
uppercase=true;
buchstabenanzahl +=1; // hier rechne ich auf "buchstabenanzahl" eins drauf, da ich ja
//mindestens 2 Buchstaben brauche, ich kann ja
//auch einen Groß- und einen Kleinbuchstaben
}}return uppercase; // haben.
}
public static boolean Kleinbuchstaben(char[] pw){ //Hier das gleiche wie oben, nur halt
char[] kleinbuchstaben = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', //mit Kleinbuchstaben
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
't', 'u', 'v', 'w', 'x', 'y', 'z', 'ä', 'ö', 'ü', 'ß'};
String checkstring = new String(pw);
boolean lowercase = false;
for (int i=0;i<kleinbuchstaben.length;i++){
if (checkstring.indexOf(kleinbuchstaben[i])>-1){
lowercase=true;
buchstabenanzahl +=1;
}}return lowercase;
}
public static boolean ZweiZiffern(char[] pw){ //Hier dursucht er das Array ob
int anzahl = 0;//Ziffern enthalten sind
char[] ziffern = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
String checkstring = new String(pw);
boolean zahlen = false;
for(int i=0;i<ziffern.length;i++){
if(checkstring.indexOf(ziffern[i])>-1){
anzahl+=1; //hier ist es etwas anders falls eine Zahl enthalten ist,
//zählt er einen int Wert anzahl +1
if(anzahl>1){ //wenn er also mehr als 2 Ziffern hat erst dann
zahlen = true; //soll der Wert true liefern.
}
}
}
return zahlen;
}
public static boolean ZweiBuchstaben(char[] pw){ //Hier kommt die Variabel buchstabenzahl
boolean buchstaben = false; //ins Spiel. ich hatte es so gedacht, dass bei Großbuchstaben()
if (buchstabenanzahl>1){ //und Kleinbuchstaben(), der Wert von buchstabenanzahl überschrieben wurde,
buchstaben = true; //je nachdem wie viele Buchstaben enthalten sind. Hier soll true zurück gegeben
}return buchstaben; //werden, wenn die buchstaben anzahl mehr als 1 ist, also mindestens 2.
}
public static void main (String...args){ //Hier will ich das ganze nun testen.
char[] pw = {'A', 'x', 'B', '1', '&', 'a', '8', 'c'}; //das ist mein Beispiel char-Array, also mein Passwort
//das Passwort ist eigentlich ein perfekt gewähltes, es
// erfüllt also die Kriterien
if(ZweiBuchstaben(pw)==true&&ZweiZiffern(pw)==true&& //die ganze Anweisung hier soll mir den Text
// "Ein gut gewähltes Passwort!"
Kleinbuchstaben(pw)==true&&Großbuchstaben(pw)==true&& //ausgeben, wenn jeder
// der Methoden oben, true Ergeben und somit alle
Mindestlänge(pw)==true&&Sonderzeichen(pw)==true){ //Bedingungen für ein gutes Passwort erfüllt sind
System.out.println("Ein gut gewähltes Passwort!");
}else{System.out.println("Das Passwort ist sch***e!");} //Wenn eine Bedingung nicht zutreffen sollte soll er mir
//ausgeben, dass mein
//Passwort e ist
}
}
Mein Problem ist, dass mein Code gemein zu mir ist und mir sagt, dass mein Code "sch***e" ist.


Wobei das Passwort eigentlich ein gut gewähltes ist, und die Kriterien erfüllt. Das muss bedeuten ich hab irgendwo einen Fehler drin, da oben. Ich finde ihn aber nicht...Kann mir einer von euch da weiterhelfen? Hab ich da irgendwo einen Denkfehler drin?
Danke schonmal im Voraus.
MfG
Bullet