Testklasse und Ausgabe

Schorni

Mitglied
Hallo,

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

Vielen lieben Dank im Voraus!!!
 
Java:
			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();
				}
siehe Kommentar
 
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.
 
Hier sitzt noch ein Fehler:
Java:
while (zeilen>7)
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;
       }
   }
 
Erstmal vielen Dank für eure schnelle Antwort. 😉

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

Sorry vorab für die Formatierung.
 
Zuletzt bearbeitet von einem Moderator:
Java:
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();
                 }
 
Danke TKausL, aber dort macht er mir eine Endlosschleife mit "[noparse]🙂[/noparse]" ....
 
Zuletzt bearbeitet von einem Moderator:
mach daraus
Java:
for (int j = 0; i<=b; j++) {

das
Java:
for (int j = 0; j<=b; j++) {
 
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();
	}
}

Grüße und noch viel Erfolg ... bwbg
 

Neue Themen


Zurück
Oben