Schlossknacker (Jede mögliche Zahlenkombination ausgeben)

Berlin_er

Mitglied
Hallo zusammen!

Ich lerne seit einiger Zeit die Programmiersprache Java. Nun habe ich eine Aufgabe vor mir, bei der ich kein Muster erkennen kann.
Zuletzt habe ich mit Schleifen gearbeitet (bevorzuge persönlich die While Schleifen (kopfgesteuert)).
Ich habe im Internet nach Antworten gesucht und habe kaum was gefunden. Entweder ist die Aufgabe anders oder es werden Datentypen/Befehle benutzt, die ich noch nicht kenne.

Situation (kurz gefasst):
Es geht um ein Fahrradschloss mit 3 Verstellringen. Von welcher Zahl bis welcher Zahl der jeweilige Verstellring geht, kann von dem Benutzer individuell per Eingabe bestimmt werden.

Bsp.:
"Erste Ziffer/Zahl linker Ring?" (wäre dann "int erstelinks")
"Letzte Ziffer/Zahl linker Ring?" (wäre dann "int letztelinks")
..Erste Ziffer/Zahl mittlerer Ring/rechter Ring usw. ...

Damit wären die Verstellringe bestimmt und nun muss man jede Kombination, die mit den Zahlen möglich ist, ausgeben. Dazu habe ich eine Vorschleife erstellt, die die "Einstellmöglichkeit" so gesehen ausgibt und solange geht, bis die maximale Anzahl der Möglichkeiten erreicht ist.

Mein Problem ist, dass ich nicht verstehe, wie ich alle Kombinationen ausgeben kann.
Ich habe versucht, die Aufgabe mit verschachtelten Schleifen zu lösen, mit If Funktionen und dann noch die Schleifendurchgänge gezählt (int zaehler) und versucht damit zu arbeiten. Leider ohne Erfolg.

Ich hoffe, dass mir einer helfen kann und bedanke mich im voraus!

Edit: Ich kann die komplette Aufgabenstellung auch per pn senden, falls die kurze Version unklar ist.
 

Berlin_er

Mitglied
Dein Code wäre interessant ;)
Die Idee mit der verschachtelten for-Schleife klingt schon mal gut.

Ich habe vergessen zu erwähnen, dass man auch nach der gesuchten Verstellmöglichkeit fragt, die dann mit x in der Vorschleife verglichen wird und durch Leerzeilen hervorgehoben wird. Aber das ist nicht das Problem (Hab ich auch noch nicht bearbeitet).

Beim letzten Versuch kam ich erst soweit.. Ich saß beim letzten Mal nicht wirklich lange daran. Die vorherigen Versuche habe ich gelöscht..

public class aufgabe {

public static void main(String[] args) {
int x = 1;
int erstelinks = InOut.readInt("Erste Ziffer linker Ring?");
int letztelinks = InOut.readInt("Letzte Ziffer linker Ring? ");
int erstemitte = InOut.readInt("Erste Ziffer mittlerer Ring?");
int letztemitte = InOut.readInt("Letzte Ziffer mittlerer Ring? ");
int ersterechts = InOut.readInt("Erste Ziffer rechter Ring?");
int letzterechts = InOut.readInt("Letzte Ziffer rechter Ring? ");
int verstell = InOut.readInt("Gesuchte Verstellmöglichkeit? ");

int ergebnislinks = (letztelinks - erstelinks) + 1;
int ergebnismitte = (letztemitte - erstemitte) + 1;
int ergebnislinks = (letzterechts - ersterechts) + 1;

int moeglichkeiten = ergebnislinks*ergebnismitte*ergebnisrechts;

System.out.println("Einstellmöglichkeit\tlinker Ring\tmittlerer Ring\trechter Ring");

while (x <= moeglichkeiten) {
System.out.print("\t "+x+" \t");
if (erstelinks > letztelinks) {
erstelinks = erstelinks - letztelinks;
} // end of if-else
while (erstelinks <= letztelinks) {
System.out.print(erstelinks+"\t");
erstelinks++;
break;
} // end of while
if (erstelinks > letztelinks) {
erstemitte++;
}
while (ersterechts != letzterechts) {

} // end of while
x++;
} // end of while


}


}
 

Robat

Top Contributor
Ich würde dir dennoch den Tipp geben bei for-Schleifen zu bleiben - die sind mMn für so eine Angelegenheit übersichtlicher.
Ein kleines Beispiel:
Java:
int iMax = 3;
int jMax = iMax;
int kMax = iMax;

for (int i = 0; i < iMax; i++) {
    for (int j = 0; j < jMax; j++) {
        for (int k = 0; k < kMax; k++) {
            System.out.printf("%d%d%d\n", i,j,k);
        }
    }
}
 

Berlin_er

Mitglied
Ich würde dir dennoch den Tipp geben bei for-Schleifen zu bleiben - die sind mMn für so eine Angelegenheit übersichtlicher.
Ein kleines Beispiel:
Java:
int iMax = 3;
int jMax = iMax;
int kMax = iMax;

for (int i = 0; i < iMax; i++) {
    for (int j = 0; j < jMax; j++) {
        for (int k = 0; k < kMax; k++) {
            System.out.printf("%d%d%d\n", i,j,k);
        }
    }
}

Was bewirkt printf? Ich kenne nur print und println. Was bewirkt %d?
 

Javinner

Top Contributor
In etwa so?
Java:
int[] PIN = {1, 2, 3, 2, 1, 3, 4, 5};
int[] crack = steal(PIN);
System.out.println(Arrays.toString(crack));
/** Konsolenausgabe */
[1, 2, 3, 2, 1, 3, 4, 5]
 

Javinner

Top Contributor
Eine Methode, welche das zu knackende Array (PIN) übergeben bekommt und dann dieses "knackt" und als Crack zurück liefert. Hattest du schon Arrays? Wie gut sind deine Programmierkenntnisse, wann hast du angefangen?
 

Berlin_er

Mitglied
Eine Methode, welche das zu knackende Array (PIN) übergeben bekommt und dann dieses "knackt" und als Crack zurück liefert. Hattest du schon Arrays? Wie gut sind deine Programmierkenntnisse, wann hast du angefangen?

Nicht wirklich viel.. Bis jetzt die Schleifentypen (while (kopf-/fußgesteuert), for-Schleifen, If Funktion (&& == || usw.), Switch Case, Ein-/Ausgabe, Random generator und vor kurzem noch Array (Zuweisung von Werten, ..length()) und String. Bin noch ziemlich am Anfang und kenne spezielles wie %d oder steal noch nicht..
Aus dem Grund, finde ich nicht wirklich etwas im Internet, was mir hilft, da ich nicht alles kenne..
Doch die Aufgabe soll größtenteils mit Schleifen gelöst werden und kann alles beinhalten, was ich bis jetzt gelernt habe.
 

Robat

Top Contributor
Sorry falls ich dich mit printf irritiert habe.
System.out.printf(..) dient einfach der formatierten Ausgabe - lass dich davon nicht beirren! Ich hätte auch System.out.println(i + " " + j + " " + k); schreiben können.

steal() ist keine Standartfunktion! @Javinner hat diese selbst implementiert.
Für die Aufgabe brauchst du aber keine Arrays.

Wie ich dich verstanden habe ist dein erstes Ziel alle Kombinationen der Zahlen auszugeben.
Dann schau einfach in Post#5 nach - dort hab ich dir bereits gezeigt wie das geht.
3 verschachtelte for-Schleifen und in der Schleife dann die Ausgabe der Zahlen.

BTW: Es gibt keine if-Funktion sondern nur if-Abfragen ;)
 

Javinner

Top Contributor
Berlin_er hat gesagt.:
Bin noch ziemlich am Anfang und kenne spezielles wie %d oder steal noch nicht
Ohne Fachliteratur wird es schwer. Falls du eine Leseratte, wie ich eine bin, bist, dann empfehle ich dir Grundkurs Programmieren in Java, Java ist auch eine Insel (November 2017 neue Ausgabe, wobei das Buch kein Lehrbuch ist, es gibts eine Onlineversion davon, schau es dir an: http://openbook.rheinwerk-verlag.de/javainsel/ ).

steal() ist eine Methode, welche ich erstellt habe, die gibt es so nicht. Lerne lieber von Anfang an ;)
 

Berlin_er

Mitglied
Ohne Fachliteratur wird es schwer. Falls du eine Leseratte, wie ich eine bin, bist, dann empfehle ich dir Grundkurs Programmieren in Java, Java ist auch eine Insel (November 2017 neue Ausgabe, wobei das Buch kein Lehrbuch ist, es gibts eine Onlineversion davon, schau es dir an: http://openbook.rheinwerk-verlag.de/javainsel/ ).

steal() ist eine Methode, welche ich erstellt habe, die gibt es so nicht. Lerne lieber von Anfang an ;)

Ja, glaube ich auch.. meistens fehlt etwas, was ich irgendwie Google beschreiben muss. Vielen Dank :)
 

Javafan01

Aktives Mitglied
Ich habe vergessen zu erwähnen, dass man auch nach der gesuchten Verstellmöglichkeit fragt, die dann mit x in der Vorschleife verglichen wird und durch Leerzeilen hervorgehoben wird. Aber das ist nicht das Problem (Hab ich auch noch nicht bearbeitet).

Beim letzten Versuch kam ich erst soweit.. Ich saß beim letzten Mal nicht wirklich lange daran. Die vorherigen Versuche habe ich gelöscht..

public class aufgabe {

public static void main(String[] args) {
int x = 1;
int erstelinks = InOut.readInt("Erste Ziffer linker Ring?");
int letztelinks = InOut.readInt("Letzte Ziffer linker Ring? ");
int erstemitte = InOut.readInt("Erste Ziffer mittlerer Ring?");
int letztemitte = InOut.readInt("Letzte Ziffer mittlerer Ring? ");
int ersterechts = InOut.readInt("Erste Ziffer rechter Ring?");
int letzterechts = InOut.readInt("Letzte Ziffer rechter Ring? ");
int verstell = InOut.readInt("Gesuchte Verstellmöglichkeit? ");

int ergebnislinks = (letztelinks - erstelinks) + 1;
int ergebnismitte = (letztemitte - erstemitte) + 1;
int ergebnislinks = (letzterechts - ersterechts) + 1;

int moeglichkeiten = ergebnislinks*ergebnismitte*ergebnisrechts;

System.out.println("Einstellmöglichkeit\tlinker Ring\tmittlerer Ring\trechter Ring");

while (x <= moeglichkeiten) {
System.out.print("\t "+x+" \t");
if (erstelinks > letztelinks) {
erstelinks = erstelinks - letztelinks;
} // end of if-else
while (erstelinks <= letztelinks) {
System.out.print(erstelinks+"\t");
erstelinks++;
break;
} // end of while
if (erstelinks > letztelinks) {
erstemitte++;
}
while (ersterechts != letzterechts) {

} // end of while
x++;
} // end of while


}


}
Warum kein Bildschirmfoto hochladen??
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
2 jede Stunde Methode ausführen Allgemeine Java-Themen 8
DStrohma Jede node in JTree mit eigenem Icon Allgemeine Java-Themen 7
S readLine() liest nur jede 2. Zeile Allgemeine Java-Themen 3
P readLine() liest nur jede dritte Zeile? Allgemeine Java-Themen 3
M .txt Datei öffnen und jede Zeile mit festem String verketten Allgemeine Java-Themen 5
S Warum benötigt jede Internetseite unbedingt das neuste Java? Allgemeine Java-Themen 11
T Klasse mit neuer Eigenschaft für jede Subclass (kompliziert) Allgemeine Java-Themen 6
F Bluetooth! Jede Antwort hilft! Allgemeine Java-Themen 3
S Keytool: mögliche Werte für Parameter Allgemeine Java-Themen 4
I Datentypen Mögliche Auswahl an Werten Allgemeine Java-Themen 4
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
Das Brot Tetris - mögliche bugs und Kritiken Allgemeine Java-Themen 15
S Mögliche Architektur für ein System Allgemeine Java-Themen 7
G was gibt es für mögliche datenbanken? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben