Mit einer Schleife eine Treppe zeichnen

Diskutiere Mit einer Schleife eine Treppe zeichnen im Java Basics - Anfänger-Themen Bereich.
KogoroMori21

KogoroMori21

Guten Tag,
ich komme irgendwie bei der Aufgabe 2 a) mit der Treppe nicht weiter. Im Anhang befindet sich meine Zeile Code.

Ich weiß das ich das mit zwei Schleifen machen muss die ineinander verschachtelt sind, aber ich weiß nicht wie ich das anstellen soll. Theoretisch könnte ich für jede Zeile die Rechtecke zeichnen, aber das wäre gemogelt, also muss ich es mit einer Schleife darstellen :).

Ich bedanke mich jetzt schon mal für eure Mühen!
Code:
public class Dekoration {
    Interaktionsbrett ib = new Interaktionsbrett();
        
        public void treppe() {
            int i = 1;
            
            while ( i<=7) {
                                
                this.ib.neuesRechteck(30 * i,30 ,30,30);
                this.ib.neuesRechteck(30 * i*2,60 ,30,30);
                this.ib.neuesRechteck(30 * i*3,90 ,30,30);
                this.ib.neuesRechteck(30 * i*4,120 ,30,30);
                this.ib.neuesRechteck(30 * i*5,150 ,30,30);
                this.ib.neuesRechteck(30 * i*6,180 ,30,30);
                this.ib.neuesRechteck(30 * i*7,210 ,30,30);
                i = i + 7;
                
                
      }
    }       
}
 

Anhänge

Zuletzt bearbeitet:
T

temi

Code bitte hier im Forum mittels Codetags posten: Die drei Punkte rechts vom Smiley - Code - Java
 
MoxxiManagarm

MoxxiManagarm

In der Aufgabenstellung steht "mit Hilfe zweier ineinandergeschachtelter Schleifen". Jetzt schaue deinen Code an :)

Als Beispiel hier mal eine Kleine Treppe auf der Konsole:
Java:
public class XTreppe {
    public static void main(String... args) {
        for (int i = 1; i <= 7; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print('X');
            }
            System.out.println();
        }
    }
}
 
T

temi

Schau dir das gewünschte Bild an und überlege, welche Schleife für welchen Teil zuständig ist. Dazu musst du schauen, welche Elemente x-mal in einer bestimmten Weise vorkommen, z.B.

***
***

Du siehst je 3 gleiche Elemente (*) und das zweimal (in zwei Zeilen).
 
MoxxiManagarm

MoxxiManagarm

Mein Beispiel hilft ja erstmal gezielt für a)

Eventuell helfen dir gedanklich noch diese Tipps:
b) Die Pyramide ähnelt der Treppe, nur dass die einzelnen Zeilen ein gewisses Offset haben. Dieses Offset verringert sich mit jeder Zeile
c) Jede 2. Zeile hat eine andere "Definition". Ich schmeiße hier mal den Modulo-Operator in den Raum.
 
KogoroMori21

KogoroMori21

In der Aufgabenstellung steht "mit Hilfe zweier ineinandergeschachtelter Schleifen". Jetzt schaue deinen Code an :)

Als Beispiel hier mal eine Kleine Treppe auf der Konsole:
Java:
public class XTreppe {
    public static void main(String... args) {
        for (int i = 1; i <= 7; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print('X');
            }
            System.out.println();
        }
    }
}
Hey, wenn ich deine Schleife nehme und das mit dem this.ib.neuesRechteck probiere dann entsteht die Treppe immer noch nicht. Ich versteh nicht wieso, auf der Console zeigt er die Treppe an mit dem ('X') aber wenn ich das System.out.println ersetze durch
this.ib.neuesRechteck(30 * i,30 ,30,30);
dann entsteht die Treppe komischerweise nicht :/
 
KogoroMori21

KogoroMori21

Ich hab es gelöst 🥰, danke @temi und @MoxxiManagarm ihr seid die besten.

Kann sein das ich mich für b) und c) nochmal melden muss aber ich hoffe nicht 😅
 
KogoroMori21

KogoroMori21

Ich in guter Dinge, dass du den Dreh raus hast. Wenn du a verstanden hast sollten b und c auch nicht so schwer sein
Code:
        public void pyramide() {
            int rows = 5, k = 0;

            for(int i = 1; i <= rows; ++i, k = 0) {
                for(int space = 1; space <= rows - i; ++space) {
                    this.ib.neuesRechteck(30 * k, 30 * i, 30, 30 );
                    this.ib.neuesRechteck(30 * rows, 30 * k, 30, 30 );
                }

                while(k != 2 * i - 1) {
                    this.ib.neuesRechteck(30 * k, 30 * i, 30, 30 );
                    ++k;
                }

            }
        }
    }
Hey sorry ich bins nochmal, ich komme einfach seid freitag nicht weiter bei b), ich probier die ganze zeit rum aber kriege die pyramide irgendwie nicht ausgegeben. Hab es mit System.out.println versucht und die Pyramide lässt sich auf der Konsole darstellen aber nicht auf dem Interakationsbrett.
Und ich kriege es auch nicht hin das in zwei schleifen zu verpacken...
 

Anhänge

MoxxiManagarm

MoxxiManagarm

Bei b sollten die Schleifen gleich bleiben wie bei a. Nur die x Position eines rechtecks verändert sich um ein offset. Dieses offset ändert sich je Zeile, also in jedem Durchlauf der äußeren Schleife
 
KogoroMori21

KogoroMori21

Okay danke ich hab es gelöst 👍
jetzt kommt das schwierigste und das ist c) aber ich hab ja schon den Tipp @MoxxiManagarm das ich es mit Modulo machen muss
 
KogoroMori21

KogoroMori21

Guten Tag Leute, ich bins nochmal und hoffe es ist das letzte mal..
Ich habe einen Ansatz bei Aufgabe c) kriege aber die restliche Mauer nicht hin..
Code:
    public void mauer() {
        
        for (int i = 0; i <= 18; i++) {
            i++;
            for (int j = 1; j <= i; j++) {               
                this.ib.neuesRechteck(30 , 30 , 30 * i , 30 );
 

Anhänge

MoxxiManagarm

MoxxiManagarm

Versuche es doch in mehreren Schritten.
Schritt 1
1589806413716.png
Schritt 2 (wie 1, nur jede 2. Zeile verschoben)
1589806475529.png
Schritt 3 (Die Lücken füllen)
1589806554312.png
 
MoxxiManagarm

MoxxiManagarm

for (int i = 0; i <= 18; i++) { i++; for (int j = 1; j <= i; j++) { this.ib.neuesRechteck(30 , 30 , 30 * i , 30 );
Im übrigen hast du hier immer die die gleiche Position x und y. Dafür machst du jedes Rechteck breiter. Optisch kommt man so bestimmt auch ans Ziel, ist aber vermutlich nicht Sinn der Übung :D Die Letzten beiden Werte müssten immer Konstant bleiben, außer für die Füllstücke
 
Thema: 

Mit einer Schleife eine Treppe zeichnen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben