Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich soll in Java ein Geschenkpapier.java mit einem Muster programmieren und dazu muss eine Testklasse erstellt werden (GeschenkpapierTest.java). Mit Parameterübergabe. Folgendes habe ich erstellt (siehe unten). Mein Problem ist, dass Java mir die 1. Zeile perfekt ausgiebt und dann nur noch leer-Zeilen (normalerweise müssten drei Zeilen mit Sternchen ausgegeben werden). Vielleicht könnt Ihr mir bitte einen Tip geben wo mein Denkfehler ist.
Geschenkpapier.java
Java:
public class Geschenkpapier {
public Geschenkpapier(){
}
public void muster1(int zeilen, int wiederholung){
while (zeilen>7)
{
while (wiederholung>0) {
System.out.print("xx ");
wiederholung -=1;
}
zeilen -=1;
System.out.println();
}
}
}
Klasse GeschenkpapierTest.java
Java:
public class GeschenkpapierTest{
public static void main(String[] args) {
Geschenkpapier Test = new Geschenkpapier();
Test.muster1(10, 8);
}
}
Ausgabe ist:
** ** ** ** ** ** ** **
// es folgen zwei Leerzeilen
public void muster1(int zeilen, int wiederholung){
while (zeilen>7)
{
while (wiederholung>0) {
System.out.print("xx ");
wiederholung -=1;
}//hier nach ist wiederholung 0 und bleibt 0
zeilen -=1;
System.out.println();
}
Der Denkfehler ist, das du den Parameter zum runterzählen verwendest. In der ersten Zeile geschieht die Ausgabe wie gewollt, danach ist aber wiederholung 0, und in den nachfolgenden Zeilen wird nichts mehr ausgegeben.
Ich würde das ganze mit for-Schleifen umsetzen und damit dir das nicht nochmal passiert die Parameter final machen.
PS: Ich hoffe die grausame Formatierung ist nur dem Copy&Paste verschuldet und der unterschiedlichen darstellung von Tabs hier und in deiner IDE.
So lange zeilen einen Wert größer 7 hat, wird die while-Schleife durchlaufen.
Na, klingelts?
Und wiederholung wird bis auf den Wert 0 herunter dekrementiert. Du müsstest also bei der Verwendung einer while-Schleife den Wert nach jeder Zeilenausgabe wieder auf den Startwert zurücksetzen.
Deine muster1()-Methode könnte daher so aussehen:
Java:
public void muster1(int zeilen, int wiederholung){
int w = wiederholung;
while (zeilen > 0) {
while (w > 0) {
System.out.print("xx ");
w--;
}
zeilen--;
System.out.println();
w = wiederholung;
}
}
Die Erklärungen sind natürlich einleuchtend und das ich den Startwert noch mal zurücksetzen muss, darauf wär ich nicht gekommen.
Ich muss diese Schleife auch als for-Schleife erstellen und dort habe ich genau das gleiche Problem. Muss ich dort den Startwert auch wieder zurück setzen?
Methode aus Geschenkpapier.java
Java:
public void muster2(int a, int b, int c){
for (;a<=5; a++) {
System.out.println();
for (; b<=9; b++) {
System.out.print(":-) ");
}
System.out.println();
for (; c<=9; c++) {
System.out.print(")-: ");
}
}
System.out.println();
}
Auszug aus GeschenkpapierTest.java (wie oben nur mit
Java:
Test.muster2(1,1,1);
Ausgabe hier:
[noparse] [/noparse]
[noparse]:-( :-( :-( :-( :-( :-( :-( :-( :-([/noparse]
es folgen wieder einige Leerzeilen
public void muster2(int a, int b, int c){
for (int i = 0;i<=a; i++) {
System.out.println();
for (int j = 0; i<=b; j++) {
System.out.print(":-) ");
}
System.out.println();
for (int k = 0; k<=c; k++) {
System.out.print(")-: ");
}
}
System.out.println();
}
Auch ist es hilfreich, größere Probleme in Teilprobleme (und damit Methoden) aufzuteilen. Viel wichtiger ist jedoch, "sprechende" Bezeichner zu verwenden. Gerade im Beispiel [c]Muster2[/c] habe ich Schwierigkeiten auf die Funktionsweise zu schließen (Bezeichner [c]a[/c], [c]b[/c] und [c]c[/c]).
Sicher wirst Du wissen, was diese bedeuten und bewirken. Aber wirst du es morgen, nächste Woche oder gar nächstes Jahr noch wissen, wenn Du Dir den Code erneut anschauen wirst? Code wird weit häufiger gelesen, als geschrieben.
Sprechende Bezeichner erleichtern hier anderen Teilnehmern, Dein Problem schnell zu erfassen.
Hier ein kleines (subjektives) Beispiel zu [c]Muster1[/c].
Java:
public class Geschenkpapier {
public static void main(String[] args) {
Muster1.print(10, 8);
}
}
class Muster1 {
public static void print(final int verticalRepetitions,
final int horizontalRepetitions) {
for(int n = 0; n < verticalRepetitions; ++n) {
printLine(horizontalRepetitions);
}
}
private static void printLine(final int horizontalRepetitions) {
for(int n = 0; n < horizontalRepetitions; ++n) {
System.out.print("** ");
}
System.out.println();
}
}