tomte
Anmeldungsdatum: 25. Oktober 2007
Beiträge: 128
|
Hallo, ich muss mit Java mehrere Muster auf der Konsole ausgeben, bei einem habe ich allerdings Schwierigkeiten einen Algorithmus zu finden.
Das ganze soll so aussehen: =W= =W= =W= =W= =W= =W= =W= =
W= =W= =W= =W= =W= =W= =W= =W=
=W= =W= =W= =W= =W= =W= =W= =W
= =W= =W= =W= =W= =W= =W= =W=
=W= =W= =W= =W= =W= =W= =W= = Also eine Art verschobenes Muster. Nach Möglichkeit möchte ich gerne die do while Schleife benutzen. Es würde aber auch die for oder die while Schleife gehen.
Hat hier jemand evtl. einen Denkanstoss für mich?
Dank euch Tomte
|
Hefeweiz3n
Moderator, Webteam
Anmeldungsdatum: 15. Juli 2006
Beiträge: 5814
Wohnort: Ankh-Morpork
|
Als erstes den String initialisieren (je nach Anzahl der "=W="'s): | String s = "";
for (int i = 0; i < max; i++) {
s += "=W= ";
}
|
Für die Ausgabe benutzen wir der Einfahcheithalber Stubstrings: | int start = 0, ende = <Zeilenlänge>;
do {
System.out.println(s.substring(start, ende));
start = ende;
ende = java.lang.Math.min(ende + <Zeilenlänge>, s.length());
} while (ende < s.length());
|
So müsste es vom Prinzip her gehen. Achtung bei Substrings: Beim Anfang ist das Zeichen immer mit drin, das Zeichen auf der Ende-Position wird NICHT gedruckt. Also eventuell mit "start" und "ende" ein bisschen rumprobieren.
|
tomte
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2007
Beiträge: 128
|
Hallo Philip, danke für die Antwort.
Ich bin absoluter Anfänger in der Sprache, die Aufgabe muss ich für die Uni machen. Substrings darf ich nicht nehmen, da noch nicht bekannt.
Ebenso darf ich nicht auf irgendeine andere Classe zugreifen. Ich soll den Algorithmus (Programm) komplett mit der for, while oder do while Schleife erstellen.
|
Hefeweiz3n
Moderator, Webteam
Anmeldungsdatum: 15. Juli 2006
Beiträge: 5814
Wohnort: Ankh-Morpork
|
Ok... Also auch kein if, Arrays oder verschachtelte Schleifen? Nur die eine Schleife?
|
tomte
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2007
Beiträge: 128
|
Verschachtelte Schleifen sind ok.
If's auch soweit sie gebraucht werden.
Arrays nicht.
|
Hefeweiz3n
Moderator, Webteam
Anmeldungsdatum: 15. Juli 2006
Beiträge: 5814
Wohnort: Ankh-Morpork
|
Also, ohne if's wirst du's nicht schaffen. Was ich hier jetzt gemacht habe: i ist der aktuelle Buschstabe der geschrieben werden sollte. Die ersten drei if's simulieren den Array den wir nicht benutzen dürfen (Hier wäre ein array[i] wesentlich einfacher *g*). z ist die aktuelle Zeile, zeilenlaenge sollte klar sein. Die modulo-Operation (%) solltest du kennen (und hoffentlich auch benutzen dürfen), ansonsten müsste man das durch ein weiteres if simulieren... \n setzt in den String einfach einen Zeilenumbruch. Ich hoffe damit kommst du klar. Wichtig ist halt das du's verstehst. 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | String s = "";
int i = 0, z = 0;
int zeilenlaenge = 38;
do {
if (i == 0 || i == 1) s += " ";
if (i == 2 || i == 4) s += "=";
if (i == 3) s += "W";
if (s.length()%zeilenlaenge == 0) {
s += "\n";
z++;
}
i = (i+1)%5;
} while (z<5);
System.out.println(s);
|
|
tomte
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2007
Beiträge: 128
|
Ja, das sieht ja schon mal ganz gut aus. Ich verstehe es noch nicht so ganz, aber wie gesagt bin ich Anfänger, und da muss ich den Code erst noch 42 mal vorwärts und rückwärts lesen und versuchen zu begreifen.
Die Befehle sind mir ansonsten alle bekannt, lediglich die Funktion length ist mir unbekannt. Vielleicht könnte ich auch noch auf die verzichten wenn ich eine Zählervariable mitlaufen lasse. Schon mal vielen Dank. Jetzt muss ich erstmal meine Kinder aus dem Kindergarten abholen.
Heute abend geht es weiter.
Tomte
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17608
Wohnort: Berlin
|
Die Zeile 5 sieht aber verbockt aus.
=W= =W= =W= =W= =W= =W= =W= =
W= =W= =W= =W= =W= =W= =W= =W=
=W= =W= =W= =W= =W= =W= =W= =W
= =W= =W= =W= =W= =W= =W= =W=
=W= =W= =W= =W= =W= =W= =W= =W=
Wieso nicht einfach:
int i = 0; int max = 5;
do {
System.out.println (" =W= =W= =W= =W= =W= =W= =W= =");
System.out.println ("W= =W= =W= =W= =W= =W= =W= =W= ");
System.out.println (" =W= =W= =W= =W= =W= =W= =W= =W");
System.out.println ("= =W= =W= =W= =W= =W= =W= =W= ");
System.out.println ("=W= =W= =W= =W= =W= =W= =W= =W=");
} while (i < max);
Ist das verboten? Inwiefern? Muster ist da, Schleife ist da.
Ist die Zahl der Zeilen fixiert? Die Zeilenlänge?
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Mit Sicherheit ist das nicht der Sinn der Übung ... 😉
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17608
Wohnort: Berlin
|
Lunar schrieb: Mit Sicherheit ist das nicht der Sinn der Übung ... 😉
Doch - Sinn der Übung klare Aufgabenstellungen zu geben.
|
DerGreem
Anmeldungsdatum: 14. April 2009
Beiträge: 206
|
user unknown schrieb: int i = 0; int max = 5;
do {
System.out.println (" =W= =W= =W= =W= =W= =W= =W= =");
System.out.println ("W= =W= =W= =W= =W= =W= =W= =W= ");
System.out.println (" =W= =W= =W= =W= =W= =W= =W= =W");
System.out.println ("= =W= =W= =W= =W= =W= =W= =W= ");
System.out.println ("=W= =W= =W= =W= =W= =W= =W= =W=");
} while (i < max);
LOOOOL 100 Punkte.
|
Hello_World
Anmeldungsdatum: 13. Juni 2006
Beiträge: 3620
|
user unknown schrieb: Wieso nicht einfach:
int i = 0; int max = 5;
do {
System.out.println (" =W= =W= =W= =W= =W= =W= =W= =");
System.out.println ("W= =W= =W= =W= =W= =W= =W= =W= ");
System.out.println (" =W= =W= =W= =W= =W= =W= =W= =W");
System.out.println ("= =W= =W= =W= =W= =W= =W= =W= ");
System.out.println ("=W= =W= =W= =W= =W= =W= =W= =W=");
} while (i < max);
Weil das eine Endlosschleife ist.
|
tomte
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2007
Beiträge: 128
|
So, nun habe ich alles hinbekommen.
Der entscheidende Anstoss war das die Zeichen einzelnd und nacheinander in der Variablen gespeichert werden. (s+=) Ich habe den if Block gegen eine switch Anweisung getauscht, und die Funktion length gegen eine ganz normale Zählvariable. Vielen dank für deine Mühe Philipp, da wäre ich nicht von alleine draufgekommen.
|