Guten Abend,
ich studiere im ersten Semester Informatik und wir haben nun mit dem Thema Rekursion begonnen. Ich habe mich sehr viele Stunden damit und mit der Aufgabe beschäftigt, aber bekomme es leider nicht hin sie zu lösen. Wir sollen in Java ein Programm schreiben, welches (1) Iterativ ein Passwort der Länge 6 herausfinden kann, wobei das Passwort nur aus kleinen Buchstaben besteht. Diesen Teil habe ich hinbekommen und bereits die Rückmeldung bekommen, dass er korrekt ist. Jetzt sollen wir das ganze (2) rekursiv umschreiben, sodass es für Passwörter beliebiger Länge funktioniert. Dazu haben wir folgenden Aufgabentext bekommen:
Dieses Problem lässt sich mit Rekursion lösen. Wir nutzen also verschachtelte Methoden-
aufrufe anstatt verschachtelter Schleifen. Das in der Beispiellösung verwendete Array c
sollen Sie als Parameter an die rekursiven Methodenaufrufe weiterreichen. Die Methode
calculatePassword soll einen weiteren Parameter int length haben, welcher angibt, wel-
che Stelle des Passworts von diesem Methodenaufruf varriiert wird. Bspw. verändert ein Me-
thodenaufruf von calculatePassword das Arrayelement c[length-1] und ruft für jedes
an dieser Stelle eingesetzte Zeichen erneut calculatePassword mit einer um 1 geringeren
length auf. Dies wird solange fortgeführt bis length=0. In diesem Fall soll das Passwort mit-
tels isValidPassword-Methode überprüft werden. Wurde das Passwort gefunden, so soll die
Methode das Passwort zurückgeben. Ansonsten soll eine leere Zeichenkette ("") zurückgege-
ben werden. Sie können die Rekursion also abbrechen, wenn ein rekursiver Methodenaufruf
eine nicht-leere Zeichenkette zurückgibt.
Sie dürfen weitere Hilfsmethoden schreiben.
Ich habe sehr viele Stunden, über die letzte Woche probiert und komme einfach nicht auf eine Lösung. Kann mir hier jemand helfen? Anbei das Iterative Programm, von welchem wir ausgehen sollen. Ich denke der fehlende Code ist sehr einfach und kurz für jemanden, der das Rekursive Denken schon kann.
[CODE lang="java" title="Programm Iterativ"]class Login {
static boolean isValidPassword(String password) {
return "abcdef".equals(password);
}
static String calculatePassword() {
char[] c = new char[6];
for (char c0 = 'a'; c0 < 'z'; ++c0) {
c[0] = c0;
for (char c1 = 'a'; c1 < 'z'; ++c1) {
c[1] = c1;
for (char c2 = 'a'; c2 < 'z'; ++c2) {
c[2] = c2;
for (char c3 = 'a'; c3 < 'z'; ++c3) {
c[3] = c3;
for (char c4 = 'a'; c4 < 'z'; ++c4) {
c[4] = c4;
for (char c5 = 'a'; c5 < 'z'; ++c5) {
c[5] = c5;
String password = new String(c);
if (isValidPassword(password)) {
return password;
}
}
}
}
}
}
}
return null;
}
public static void main(String[] args) {
Out.println("Berechnetes Passwort: " + calculatePassword());
int tries = 0;
do {
Out.print("Geben Sie das Passwort ein: ");
String password = In.readLine();
if (isValidPassword(password)) {
Out.println("Login erfolgreich");
return;
} else {
Out.println("Passwort falsch");
++tries;
}
} while (tries < 3);
Out.println("Passwort zu oft falsch eingegeben");
}
}
[/CODE]
ich studiere im ersten Semester Informatik und wir haben nun mit dem Thema Rekursion begonnen. Ich habe mich sehr viele Stunden damit und mit der Aufgabe beschäftigt, aber bekomme es leider nicht hin sie zu lösen. Wir sollen in Java ein Programm schreiben, welches (1) Iterativ ein Passwort der Länge 6 herausfinden kann, wobei das Passwort nur aus kleinen Buchstaben besteht. Diesen Teil habe ich hinbekommen und bereits die Rückmeldung bekommen, dass er korrekt ist. Jetzt sollen wir das ganze (2) rekursiv umschreiben, sodass es für Passwörter beliebiger Länge funktioniert. Dazu haben wir folgenden Aufgabentext bekommen:
Dieses Problem lässt sich mit Rekursion lösen. Wir nutzen also verschachtelte Methoden-
aufrufe anstatt verschachtelter Schleifen. Das in der Beispiellösung verwendete Array c
sollen Sie als Parameter an die rekursiven Methodenaufrufe weiterreichen. Die Methode
calculatePassword soll einen weiteren Parameter int length haben, welcher angibt, wel-
che Stelle des Passworts von diesem Methodenaufruf varriiert wird. Bspw. verändert ein Me-
thodenaufruf von calculatePassword das Arrayelement c[length-1] und ruft für jedes
an dieser Stelle eingesetzte Zeichen erneut calculatePassword mit einer um 1 geringeren
length auf. Dies wird solange fortgeführt bis length=0. In diesem Fall soll das Passwort mit-
tels isValidPassword-Methode überprüft werden. Wurde das Passwort gefunden, so soll die
Methode das Passwort zurückgeben. Ansonsten soll eine leere Zeichenkette ("") zurückgege-
ben werden. Sie können die Rekursion also abbrechen, wenn ein rekursiver Methodenaufruf
eine nicht-leere Zeichenkette zurückgibt.
Sie dürfen weitere Hilfsmethoden schreiben.
Ich habe sehr viele Stunden, über die letzte Woche probiert und komme einfach nicht auf eine Lösung. Kann mir hier jemand helfen? Anbei das Iterative Programm, von welchem wir ausgehen sollen. Ich denke der fehlende Code ist sehr einfach und kurz für jemanden, der das Rekursive Denken schon kann.
[CODE lang="java" title="Programm Iterativ"]class Login {
static boolean isValidPassword(String password) {
return "abcdef".equals(password);
}
static String calculatePassword() {
char[] c = new char[6];
for (char c0 = 'a'; c0 < 'z'; ++c0) {
c[0] = c0;
for (char c1 = 'a'; c1 < 'z'; ++c1) {
c[1] = c1;
for (char c2 = 'a'; c2 < 'z'; ++c2) {
c[2] = c2;
for (char c3 = 'a'; c3 < 'z'; ++c3) {
c[3] = c3;
for (char c4 = 'a'; c4 < 'z'; ++c4) {
c[4] = c4;
for (char c5 = 'a'; c5 < 'z'; ++c5) {
c[5] = c5;
String password = new String(c);
if (isValidPassword(password)) {
return password;
}
}
}
}
}
}
}
return null;
}
public static void main(String[] args) {
Out.println("Berechnetes Passwort: " + calculatePassword());
int tries = 0;
do {
Out.print("Geben Sie das Passwort ein: ");
String password = In.readLine();
if (isValidPassword(password)) {
Out.println("Login erfolgreich");
return;
} else {
Out.println("Passwort falsch");
++tries;
}
} while (tries < 3);
Out.println("Passwort zu oft falsch eingegeben");
}
}
[/CODE]