Muster waagerecht wiederholen.

ReverseFlop

Neues Mitglied
Ich soll folgendes Muster erzeugen:

https://imgur.com/p2xbj9Y

Das habe ich bis jetzt:

https://imgur.com/0RrIDh1

Das ein Paar Zeilen doppelt sind, ist auch ein Problem, aber hat momentan keine hohe Priorität.
Mein Problem liegt eher darin, das Muster jetzt auch noch auf der waagerechten Ebene zu wiederholen.

Das ist mein bisheriger Code:

Java:
public class Muster {

    public static void main(String[] args) {

        final char indentChar = ' ';
        final char fillChar = '+';
        int fillWidth;
        int indentWidth;
        int triangleBaseLength = 9;
        int triangleHeight = (triangleBaseLength / 2) + 1;


        int horizontalRepeats = 5;
        int verticalRepeats = 2;

         for (int y = 1; y <= verticalRepeats; y++) { //senkrechte Wiederholung                    
                    
               for (int i = 0; i < triangleHeight; i++) { //Spitze unten                                                    
                     for (indentWidth = 0; indentWidth < triangleHeight * 0 + i; indentWidth++) {      
                           System.out.print(indentChar);

                    }

                     for (fillWidth = 0; fillWidth < (triangleBaseLength - i * 2); fillWidth++) {               
                           System.out.print(fillChar);

                    }

                     System.out.println();

                    }
                 
                     for (int i = 1; i <= triangleHeight; i++) { //Spitze oben                                                     
                       for (indentWidth = 0; indentWidth < triangleHeight * 1 - i; indentWidth++) {                
                             System.out.print(indentChar);

                       }

                       for (fillWidth = 0; fillWidth < (i * 2 - 1); fillWidth++) {                                

                             System.out.print(fillChar);


                       }

                        System.out.println(); //senkrechte Wiederholung

                    }
    }
}

Die waagerechte Darstellung hätte ich nun ähnlich probiert, also mit for "(int y = 1; y <= horizontalRepeats; y++)". Aber ich weiß jetzt nicht wie ich es printe, also bei senkrecht war es "System.out.println();" , aber was ist das waagereche Gegenstück? "System.out.print();" scheint nicht zu funktionieren.

Wahrscheinlich eine sehr einfache Lösung, aber als totaler Anfänger ist es für mich noch ein Problem. Array und andere weiterfortgeschrittene Dinge dürfen wir noch nicht verwenden.

Ich bin für jede Hilfe dankbar!
 

mihe7

Top Contributor
Doch, System.out.print() gibt die angegebene Zeichenkette aus, ohne Zeilenumbruch am Ende. Du musst also erst jede Zeile vollständig ausgeben, dann den Zeilenumbruch einfügen, dann die nächste Zeile ausgeben usw.
 

Senftube

Aktives Mitglied
Hallo,
Ja, ist doch schon fleißig, das Muster mühseelig jedesmal neu zu berechnen und zeichenweise auszugeben.
Ich habs mal so gemacht, mit dem Nachteil das die horizontale Wiederhoilrate nicht variable ist - könnte das
aber noch machen...
Java:
import java.text.MessageFormat;

public class Muster
{
   private static final String[] pat = new String[]{  
   // das muster als string array definieren
            "+++++++++",
             " +++++++ ",
             "  +++++  ",
             "   +++   ",
             "    +    ",
             "   +++   ",
             "  +++++  ",
             " +++++++ ",   
             "+++++++++" };

public static void main(String[] args)
{
    int verticalRepeats = 3;
    int height = pat.length; // also 9
    int start=0;
    String line;

     for (int i = 0; i < verticalRepeats; i++) //senkrechte Wiederholung
     {                             
         for (int h = start; h < height; h++)
         {
             line = MessageFormat.format("{0}{0}{0}{0}{0}",pat[h]); // horz.Wiederholrate ist 5
             System.out.println(line);     
         }
         start=1; // damit die letzte zeile nicht doppelt kommt nur beim ersten mal ausgeben       
     }
} //--- end of main()
} //--- end of class Muster
 

Senftube

Aktives Mitglied
Wenn die horiz.Wiederholrate variable sein soll, dann so:

Java:
public static void main(String[] args)
{
    int verticalRepeats = 3, horizontalRepeats=5, start=0;  
    int height = pat.length; // also 9
    String line,fmt="";
    for (int i=0;i < horizontalRepeats;i++ ) fmt += "{0}";

     for (int i = 0; i < verticalRepeats; i++)
     {                             
         for (int h = start; h < height; h++)
         {
             line = MessageFormat.format(fmt,pat[h]);
             System.out.println(line);     
         }
         start=1; // damit die letzte zeile nicht doppelt kommt  nur beim ersten mal ausgeben       
     }
} //--- end of main()
} //--------------------- end of class Muster
 [/java]

Habe auch was von dir gelernt: imgur kannte ich noch nicht, ist quasi youtube für bilder :-)
 

Neue Themen


Oben