Erste Schritte Verschachtelte Schleifen

friedadt

Mitglied
Hallo,

es geht um folgende Aufgabe:

Schreiben Sie ein Code-Fragment mit dem das folgende 8x8-Muster ausgegeben wird.

# # # # # # # #

# # # # # # # _

# # # # # # _ _

# # # # # _ _ _

# # # # _ _ _ _

# # # _ _ _ _ _

# # _ _ _ _ _ _

# _ _ _ _ _ _ _

Zur Ausgabe dürfen Sie nur die folgenden vier Ausgabe-Anweisungen verwenden:

System.out.print("#");

System.out.print("_");

System.out.print(" ");

System.out.println();

Jede davon darf nur höchstens einmal in Ihrer Lösung vorkommen.


Wie schon bei der Schachbrett-Aufgabe in dem anderen Thread, weiss ich einfach nicht wie ich vorgehen soll bzw. der Ansatz fehlt mir, wenn ich die Aufgabenstellung lese...

Ich versuche mir neben meinem Studium der BWL selber JAVA beizubringen und das sind Aufgaben die ich aus dem Internet habe - meist ohne Lösung.

Daher habe ich mich hier im Forum angemeldet, um Hilfe von Gleichgesinnten und Profis zu bekommen.

Selbst wenn ich oder jemand anders hier im Forum nach einer Lösung fragt oder um Hilfe bittet, sollte nicht gleich vom Schlimmsten ausgegangen werden. Letztendlich betrügt man sich nur selbst und fliegt spätestens am Prüfungstag auf die Schnauze...

Bisher bin ich soweit gekommen:

Java:
public class Muster {

    public static void main(String[] args) {

//äußere Schleife (Zeilenindex)
        for (int z = 0; z <= 8; z++) {

//innere Schleife (Spaltenindex)
            for (int s = 0; s <= 8; s++) {

                System.out.print("#");
                System.out.print(" ");
           
            }
           
                System.out.println();
        }

    }
}

Wie kann ich jetzt das andere Symbol (-) einfügen in meinen Code? Bitte erstmal um Tipps.

Vielen Dank
 

Tarrew

Top Contributor
Du bist schon relativ nah dran ;)
Ein Ansatz wäre es mit drei for-Schleifen zu machen. Die äußere für die Zeilen (wie du es schon hast). Und dann zwei innere Schleifen. Eine für die # und eine für die _
Java:
public class Muster {

    public static void main(String[] args) {
     
//äußere Schleife (Zeilenindex)
        for (int z = 0; z <= 8; z++) {

//innere Schleife (Spaltenindex)
            for (;;) { //<-- Hier überlegen
                System.out.print("#");
                System.out.print(" ");        
            }
            for(;;){ //<-- Hier überlegen
                System.out.print("_");
                System.out.print(" ");
            }       
            System.out.println();
        }

    }
}

Wenn man dann einen Schritt weiter geht könnte man es auch mit einer einzigen for-Schleife machen.
 
Zuletzt bearbeitet:

friedadt

Mitglied
Java:
public class Schleifen {
    public static void main(String[] args) {
        //äußere Schleife (Zeilenindex)
            for (int z = 0; z <= 8; z++) {

    //innere Schleife (Spaltenindex)
                for (int i = 0; i <= 8; i++ ) { //<-- Hier überlegen
                    System.out.print("#");
                    System.out.print(" ");
                }
               for (int j = 8; j >= 0; j--){ //<-- Hier überlegen
                    System.out.print("_");
                      System.out.print(" ");
                }
                System.out.println();
                        }
                    }
                }

Kann mir jemand bitte erklären wie ich es schaffe, dass pro Zeile 1 " # " weniger und dafür ein " - " am Zeilenende erscheint?

Ist es auch möglich, statt inkrement/dekrement-Operationen auch andere Anweisungen zu erstellen? Gleiches für die Bedingung... müssen das immer relationale Bedingungen sein??

Danke für eure Hilfe!!
 
Zuletzt bearbeitet von einem Moderator:
K

kneitzel

Gast
Die Lösung mit den drei for-Schleifen nutzt jetzt die Ausgabe des Leerzeichens doppelt. Das könnte man in eine Funktion schieben, aber das wäre wohl gemogelt.

Was immer wichtig ist, ehe man code schreibt: Analyse des Problems!

Kannst Du Dir etwas überlegen, wie du von zeile und spalte auf das anzuzeigende symbol kommst? Schreib sonst mal die Ausgabe auf einen Zettel und dann überleg Dir paar Operationen dessen Ergebnis Du zu dem Zeichen schreibst. Fang mit einfachen Operationen an wie zeile - spalte oder so.
Und vielleicht siehst Du dann eine einfache Regel, so dass du dann in den zwei for Schleifen eine if bedingung hast, die entweder das eine oder das andere symbol ausgibt.
dann evtl. noch ein if, das prüft, ob man noch nicht am Ende der Zeile ist und dann ggf. ein Leerzeichen ausgibt (falls am Ende der Zeile kein Leerzeichen sein soll .... )

Konrad
 

JStein52

Top Contributor
Du kannst dir einen Zähler machen der angibt wie oft du in der aktuellen Zeile "#" ausgeben sollst. Den zählst du dann in jeder Zeile ( = äussere Schleife) um eins runter. In der inneren Schleife ( = Zeichen pro Zeile) fragst du ab ob dein Index i noch kleiner als besagter Zähler ist. Und abhängig davon gibst du "#" oder "_" aus
 

friedadt

Mitglied
Der nachfolgende Code sollte passen oder? :)

Java:
class Muster {

    public static void main(String[] args) {

        for (int i = 1; i <= 8; i++) {

            for (int j = 8; i <= j; j--) {
                System.out.print(" # ");
            }
            for (int j = 1; j <= i - 1; j++) {
                System.out.print(" - ");
        }
            System.out.println();
        }
    }
}

Vielen Dank für eure Hilfe und Tipps...
 
K

kneitzel

Gast
Also der Rahmen für die Lösung müsste so aussehen:
Code:
class Muster {
 public static void main(String[] args){

       for(int i = 1; i <=8; i++) {
           for(int j = 1; i <= 8; j++) {
             if (Bedingung) {
               System.out.print("#");
             } else {
               System.out.print("_");
             }
             System.out.print(" ");
           }
           System.out.println();
       }
   }
}

Die Frage ist nur, was Bedingung ist. Ist da die Analyse des eigentlichen Problems schon etwas weiter gekommen? Dass es irgendwas mit i und j sein müsste, war ja schon gesagt ...

Konrad
 

JStein52

Top Contributor
Und ich würde den Rahmen auch ein bisschen verändern. Den Zeilenindex von 8 bis 1 laufen lassen. Das vereinfacht die Überlegung für die Bedingung:

Code:
        for (int i = 8; i >0; i--) {
            for (int j = 1; j <= 8; j++) {
                if (j<=i) {
                    System.out.print("#");
                } else {
                    System.out.print("_");
                }
                System.out.print(" ");
            }
            System.out.println();
        }
 
K

kneitzel

Gast
Ohh ja, das stimmt. Das ist das Problem, wenn man keine ordentlichen Variablen nimmt. Hier hätten sich zeile und spalte angeboten. Die Idee mit dem rückwärts zählen ist gut - darauf bin ich nicht gekommen. Ich hatte halte einfach nur eine Bedingung wie i+j <= 9 im Sinn gehabt, aber Deine Idee gefällt mir sogar noch besser.

Damit haben wir dann jetzt auch eine schöne Lösung für den TE erstellt. Ich habe den Anfang gemacht und Du hast dann noch einen schönen zweiten Teil beigesteuert :)
 

Neue Themen


Oben