Servus zusammen!
Also, ich hab eine Class "Carpet" geschrieben, die mir für 3 selbstzubestimmende Int-Variablen ein Teppichmuster mit den Zeichen "." und "#" ausgibt.
z.B.: java Carpet 4 3 1 gibt aus:
. . . . ####. . . .
. . . . ####. . . .
. . . . ####. . . .
. . . . ####. . . .
####. . . . ####
####. . . . ####
####. . . . ####
####. . . . ####
. . . . ####. . . .
. . . . ####. . . .
. . . . ####. . . .
. . . . ####. . . .
Variable 1 (hier mit dem Wert 4): Anzahl der Elemente (Länge und Breite) eines Punkt- bzw. Rautequaders
Variable 2 (hier mit dem Wert 3): Anzahl der Quader für die Länge und Breite des "Teppiches"
Variable 3 (hier mit dem Wert 1): Mit welchem Muster beginnt das Feld (0 = Raute / 1 = Punkt)
Jetzt geht das Programm folgendermaßen vor:
Es zeichnet mir die erste Zeile mit dem ersten Muster (hier: Punkte).
Dann zeichnet es mir die erste Zeile mit dem zweiten Muster (hier: Raute)
Dies geschieht in EINER for-Schleife. Danach wird die komplette erste Zeile nach unten entsprechend den eingegebenen Variablen vervielfältigt (alles mit for-Schleifen).
Jetzt muss ich natürlich die erste Zeile zuvor halbieren, da ich sonst am Ende doppelt so viele Quader in der Breite hab wie gewollt. (Das liegt daran, dass die ersten beide Schritte wie bereits erwähnt in EINER for-Schleife laufen).
Halbiere ich jedoch Int-Variablen, die ungerade sind, sprich wie im obigen Beispiel "3", so kriege ich nur einen Quader in die Breite (int 3/2 = 1). Deshalb lasse ich noch per Modulo-Rechnung auf eine eventuell ungerade Quader-Anzahl prüfen und hänge dann dementprechend diese fehlenden Quader an.
Am Ende wird noch ein Absatz gemacht und das Muster nach jeder vollständigen Quader-Reihe verschachtelt (quasi wie ein Schachbrett).
Jetzt ist die eigentliche Frage:
Wie kann ich diesen Code derart vereinfachen, dass ich höchsten 2 bis 3 for-Schleifen verwende und alles auch mit einer ungeraden Quader-Anzahl funktioniert? Das Programm an sich funktioniert ja perfekt, aber geht es auch einfacher?
Hier der Code:
Vielen Dank schonmal!
Ich hoffe ich hab hier niemanden mit so viel Text erschlagen
Also, ich hab eine Class "Carpet" geschrieben, die mir für 3 selbstzubestimmende Int-Variablen ein Teppichmuster mit den Zeichen "." und "#" ausgibt.
z.B.: java Carpet 4 3 1 gibt aus:
. . . . ####. . . .
. . . . ####. . . .
. . . . ####. . . .
. . . . ####. . . .
####. . . . ####
####. . . . ####
####. . . . ####
####. . . . ####
. . . . ####. . . .
. . . . ####. . . .
. . . . ####. . . .
. . . . ####. . . .
Variable 1 (hier mit dem Wert 4): Anzahl der Elemente (Länge und Breite) eines Punkt- bzw. Rautequaders
Variable 2 (hier mit dem Wert 3): Anzahl der Quader für die Länge und Breite des "Teppiches"
Variable 3 (hier mit dem Wert 1): Mit welchem Muster beginnt das Feld (0 = Raute / 1 = Punkt)
Jetzt geht das Programm folgendermaßen vor:
Es zeichnet mir die erste Zeile mit dem ersten Muster (hier: Punkte).
Dann zeichnet es mir die erste Zeile mit dem zweiten Muster (hier: Raute)
Dies geschieht in EINER for-Schleife. Danach wird die komplette erste Zeile nach unten entsprechend den eingegebenen Variablen vervielfältigt (alles mit for-Schleifen).
Jetzt muss ich natürlich die erste Zeile zuvor halbieren, da ich sonst am Ende doppelt so viele Quader in der Breite hab wie gewollt. (Das liegt daran, dass die ersten beide Schritte wie bereits erwähnt in EINER for-Schleife laufen).
Halbiere ich jedoch Int-Variablen, die ungerade sind, sprich wie im obigen Beispiel "3", so kriege ich nur einen Quader in die Breite (int 3/2 = 1). Deshalb lasse ich noch per Modulo-Rechnung auf eine eventuell ungerade Quader-Anzahl prüfen und hänge dann dementprechend diese fehlenden Quader an.
Am Ende wird noch ein Absatz gemacht und das Muster nach jeder vollständigen Quader-Reihe verschachtelt (quasi wie ein Schachbrett).
Jetzt ist die eigentliche Frage:
Wie kann ich diesen Code derart vereinfachen, dass ich höchsten 2 bis 3 for-Schleifen verwende und alles auch mit einer ungeraden Quader-Anzahl funktioniert? Das Programm an sich funktioniert ja perfekt, aber geht es auch einfacher?
Hier der Code:
Java:
public class Carpet {
public static void main(String args[]){
//einzugebende Variablen
int lengthQuad = Integer.parseInt(args[0]);
int amountQuad = Integer.parseInt(args[1]);
int pattern = Integer.parseInt(args[2]);
//fortlaufende Zahlen
int n_0;
int n_1;
int n_2;
int n_3;
int n_4;
int n_5;
int n_6;
//Teppichmuster-Variablen
String cross = "#";
String dot = ".";
//vervielfältigt erste Quader-Reihe nach unten
for(n_0 = 1; n_0 <= amountQuad; n_0++){
//komplette erste Quader-Reihe
for(n_1 = 1; n_1 <= lengthQuad; n_1++){
for(n_2 = 1; n_2 <= amountQuad/2; n_2++){
//Muster A erste Zeile
for(n_3 = 1; n_3 <= lengthQuad; n_3++){
if(pattern == 0){
System.out.print(cross);
}
else if(pattern == 1){
System.out.print(dot);
}
}
//Muster B erste Zeile
for(n_4 = 1; n_4 <= lengthQuad; n_4++){
if(pattern == 0){
System.out.print(dot);
}
else if(pattern == 1){
System.out.print(cross);
}
}
}
//falls Quader-Anzahl ungerade: vervollständigen der ersten Zeile
for(n_5 = 1; n_5 <= lengthQuad; n_5++){
if(pattern == 0 && amountQuad%2 == 1){
System.out.print(cross);
}
}
for(n_6 = 1; n_6 <= lengthQuad; n_6++){
if(pattern == 1 && amountQuad%2 == 1){
System.out.print(dot);
}
}
//Absatz nach jeder Zeile
System.out.println("");
}
//verschachteln des Musters
if(pattern == 0){
pattern = 1;
}
else if(pattern == 1){
pattern = 0;
}
}
}
}
Vielen Dank schonmal!
Ich hoffe ich hab hier niemanden mit so viel Text erschlagen
Zuletzt bearbeitet: