Werte Java-Profis
Als Aufgabe im Informatikunterricht soll man eine Algorithmus entwickeln, welcher ein bis zu vierstelliges Passwort errät. Dabei kann das Passwort ein-, zwei-,drei- oder vierstellig sein, das weiß man vorher nicht. Auch muss jeder Versuch gesondert probiert werden...
Ich habe folgende Lösung erarbeitet, die auch funkt, die mir aber etwas umständlich erscheint.
Meine Bitten:
a.) welche Optimierungsmöglichkeiten fallen Euch da ein ... ;-)
b.) welche Lösungen gäbe es für Passwörter mit unlimitierter Passwortlänge
Als Aufgabe im Informatikunterricht soll man eine Algorithmus entwickeln, welcher ein bis zu vierstelliges Passwort errät. Dabei kann das Passwort ein-, zwei-,drei- oder vierstellig sein, das weiß man vorher nicht. Auch muss jeder Versuch gesondert probiert werden...
Ich habe folgende Lösung erarbeitet, die auch funkt, die mir aber etwas umständlich erscheint.
Meine Bitten:
a.) welche Optimierungsmöglichkeiten fallen Euch da ein ... ;-)
b.) welche Lösungen gäbe es für Passwörter mit unlimitierter Passwortlänge
Java:
public class Main {
//Method for handling result in String compare
public static boolean checking(String s, String p) {
if (s.equals(p)) {
//Strings are equal
System.out.println("PW found, it is: " + s);
return true;
} else {
//Strings are not equal, checked letter is shown
System.out.println("Letter: " + s);
return false;
}
}
public static void main(String[] args) {
// Initial value for ascii char
char asc1 = 'a';
char asc2 = 'a';
char asc3 = 'a';
char asc4 = 'a';
//given password
String pw = "01av";
//initial value for s
String s = null;
//searching for 0,1,2, ....X,Y, Z
for (int i = 48; i < 123; i++) {
asc1 = (char) i;
//building a String to compare
s = new StringBuilder().append(asc1).toString();
//static method checking
if (checking(s, pw) == true) {
return;
}
for (int j = 48; j < 123; j++) {
asc2 = (char) j;
s = new StringBuilder().append(asc1).append(asc2).toString();
if (checking(s, pw) == true) {
return;
}
for (int k = 48; k < 123; k++) {
asc3 = (char) k;
s = new StringBuilder().append(asc1).append(asc2).append(asc3).toString();
if (checking(s, pw) == true) {
return;
}
for (int l = 48; l < 123; l++) {
asc4 = (char) l;
s = new StringBuilder().append(asc1).append(asc2).append(asc3).append(asc4).toString();
if (checking(s, pw) == true) {
return;
}
}
}
}
}
}