Muster auf der Konsole ausgeben lassen (Schleifen)

ElifÖzt

Mitglied
Hallo,

ich bin neu hier und habe bezüglich des Forums keine Erfahrungen, deswegen entschuldigt und belehrt mich eines besseren, falls ich mit dieser Frage etwas falsch gemacht habe.

Ich muss in Java ein Programm erstellen, welches ein Muster aus X und . ausgibt. Im Programm muss die Methode druckeMuster mit 4 Parameter vorhanden sein:
  • Anzahl der Felder in horizontaler Richtung
  • Anzahl der Felder in vertikaler Richtung
  • Anzahl der Zeichen pro Feld in horizontaler Richtung (Breite eines Feldes)
  • Anzahl der Zeichen pro Feld in vertikaler Richtung (Höhe eines Feldes)
druckeMuster(6, 4, 5, 3) ergibt:
XXXXX.....XXXXX.....XXXXX.....
XXXXX.....XXXXX.....XXXXX.....
XXXXX.....XXXXX.....XXXXX.....
.....XXXXX.....XXXXX.....XXXXX
.....XXXXX.....XXXXX.....XXXXX
.....XXXXX.....XXXXX.....XXXXX
XXXXX.....XXXXX.....XXXXX.....
XXXXX.....XXXXX.....XXXXX.....
XXXXX.....XXXXX.....XXXXX.....
.....XXXXX.....XXXXX.....XXXXX
.....XXXXX.....XXXXX.....XXXXX
.....XXXXX.....XXXXX.....XXXXX

und druckeMuster(8, 5, 2, 1) ergibt:
XX..XX..XX..XX..
..XX..XX..XX..XX
XX..XX..XX..XX..
..XX..XX..XX..XX
XX..XX..XX..XX..

Mein bisheriger Quellcode:
Java:
public class Muster {
  
    public void druckeMuster(int horizont, int vertikal, int breite, int hoehe){
      
    }
    public void maleQuadrat(int quad){
        for (int a = 0; a<quad; a++)
        {
            for (int i = 0; i<quad; i++)
                System.out.print("X");
            System.out.println();
        }
    }
    public void malePunkt(int punkt){
        for (int s = 0; s<punkt; s++)
        {
            for (int j = 0; j<punkt; j++)
                System.out.print(".");
            System.out.println();
        }
    }
    public void maleHoehe(int kreuz, int pun) {
        for (int f = 0; f<=kreuz; f++) {
            System.out.println(".");
        }
        for (int h = 0; h<=pun; h++)
            System.out.println("X");
    }
    public void maleBreite(int kreuz, int pun) {
        for (int f = 0; f<=kreuz; f++) {
            System.out.print(".");
        }
        for (int h = 0; h<=pun; h++)
            System.out.print("X");
    }

    public static void main(String[] arg){
        Muster eins = new Muster();
        eins.maleQuadrat(1);
        eins.malePunkt(1);
        eins.maleHoehe(5, 3);
        eins.maleBreite(3, 2);
    }
}
Ich bin noch Anfänger und stehe gerade auf dem Schlauch. Ich hoffe ihr könnt mir helfen.
Danke im Voraus
ElifÖzt
 
Zuletzt bearbeitet von einem Moderator:

InfectedBytes

Top Contributor
du musst das ganze einfach zeilenweise machen.
Schreib dir dazu also eine Methode, welche nur eine einzige Zeile korrekt ausgibt. Diese Methode braucht im Grunde also nur drei Sachen wissen:
*Anzahl der Felder in horizontaler Richtung
*Anzahl der Zeichen pro Feld in horizontaler Richtung (Breite eines Feldes)
*Soll mit X oder mit . angefangen werden

Dann kannst du dir eine Methode Schreiben, welche eben mehrere Zeilen ausgibt, also welche sowas ausgibt:
xx..xx..
xx..xx..

Schließlich dann noch eine Methode, welche das ganze abwechselnd macht:
xx..xx..
xx..xx..
..xx..xx
..xx..xx
 

ElifÖzt

Mitglied
Danke für die Antwort InfectedBytes,

den Gedanken kann ich nachvollziehen, aber mir ist nur nicht ganz klar, wie ich diese Methode erstellen soll in Java. Als ich das mit einer verschachtelten for-Schleife versucht hab, waren es nicht so viele Punkte wie ich als Parameter angegeben habe. Z. B.: bei eins.maleBreite(3, 3); war die Ausgabe: .XXX.XXX.XXX
 

Castyll

Aktives Mitglied
Zufälligerweise Erstsemesterer Uni Mannheim ? ;) Habe diese Aufgabe nämlich auch gerade gemacht. Wie infectedbytes schon richtig lag, musst du das zeilenweise machen. Die erste Zeile soll so aussehen:
XXXXX.....XXXXX.....XXXXX.....
XXXXX.....XXXXX.....XXXXX.....
XXXXX.....XXXXX.....XXXXX.....

Von da an solltest du so vorangehen:
Java:
for (int i=0; i<gegebeneHoehe; i++)
{
for (int j=0; j<gegebeneGesamteBreite; j++)
{
   if ( j%2!=0)
   { for (int k=0; k<gegebeneBreitederEinzelnenfelder;k++)
      {gebe X aus }}
   if (j%2==0)
{  for(int k=0;k<gegebeneBreitederEinzelnenfelder;k++)
{   gebe . aus }}

}

Zeilenumbruch
}

So würdest du die erste Reihe codieren. Wenn du dir die zweite Reihe genauer anguckst, bemerkst du dass das das selbe nur umgekehrt.
 
Zuletzt bearbeitet von einem Moderator:

ElifÖzt

Mitglied
Uni Mannheim ja, Erstsemester jain; ich bin Schülerstudent, hab deswegen auch kein Programmierkurs und deswegen fällt es mir ab und zu bisschen schwieriger ;)

Wenn ich das jetzt so mache:
Java:
public void horizont(int hoehe, int gesBreite, int einBreite) {
        for (int i=0; i<hoehe; i++)
        {
            for (int j=0; j<gesBreite; j++)
            {
                if ( j%2!=0)
                {
                    for (int k=0; k<einBreite;k++)
                    {
                    System.out.print("X");
                    }
                }
                if (j%2==0)
                {
                    for(int k=0;k<einBreite;k++)
                    {
                        System.out.print(".");
                    }
                }
            }
            System.out.println();
        }
    }

kommt als Ausgabe:
.....XXXXX
.....XXXXX
.....XXXXX

Sorry, wenn ich mich zu blöd anstelle :D
und danke für die Hilfe
 
Zuletzt bearbeitet von einem Moderator:

Spencer Reid

Mitglied
Hallo,

Manchmal hilft die Lösung ja es zu verstehen, deswegen hab ich mal schnell etwas zusammen geschrieben, dass müsste funktionieren.

Java:
public void printMuster(final int fieldCountHorizontal, final int fieldCountVertical,
            final int countCharactersPerHorizontalField, final int countCharactersPerVerticalField) {

        // Vertikale Höhe
        for (int i = 0; i < fieldCountVertical; i++) {
            if (isEvenNumber(i)) {
                for (int j = 0; j < countCharactersPerVerticalField; j++) {
                    printHorizontalMuster(fieldCountHorizontal, countCharactersPerHorizontalField, "X", ".");
                    // Zeilenumbruch
                    System.out.println();
                }
            } else {
                for (int j = 0; j < countCharactersPerVerticalField; j++) {
                    printHorizontalMuster(fieldCountHorizontal, countCharactersPerHorizontalField, ".", "X");
                    // Zeilenumbruch
                    System.out.println();
                }
            }
        }
    }

    private void printHorizontalMuster(final int fieldCountHorizontal,
            final int countCharactersPerHorizontalField, final String firstCharacter, final String secondCharacter) {
        String character = "";
        // Horizontale Breite
        for (int i = 0; i < fieldCountHorizontal; i++) {
            if (isEvenNumber(i)) {
                character = firstCharacter;
            } else {
                character = secondCharacter;
            }
            for (int j = 0; j < countCharactersPerHorizontalField; j++) {
                System.out.print(character);
            }
        }
    }

    private boolean isEvenNumber(final int number) {
        if (number % 2 == 0) {
            // gerade Zahl
            return true;
        } else
            // ungerade Zahl
            return false;
        }
 

ElifÖzt

Mitglied
Danke Spencer Reid für die Antwort,
also es klappt auf jeden Fall. Trotzdem habe ich etwas Verständnisprobleme mit dem Code. Wäre mega lieb, wenn du mir vielleicht ganz kurz erklärst was jede Methode macht und was die Parameter sind.
Prinzipiell gesehen ist mir alles klar, aber ich will es auch nachhaltig für die Zukunft lernen und mit ein paar Erklärungen könnte ich den Weg besser nachvollziehen. :)
 

Spencer Reid

Mitglied
Hey!

klar, ich habe mal versucht im source Code Kommentare an den entsprechenden Stellen einzufügen und hoffe das es so etwas klarer wird.

Ansonsten kannst du auch zu einzelnen Punkten gerne nachfragen, dann versuche ich das noch genauer zu erklären.

Java:
/**
     *
     * Gibt ein Muster mit den übergebenen Werten auf der Konsole aus.
     *
     *
     * @param fieldCountHorizontal
     *            Anzahl der Felder in horizontaler Richtung
     * @param fieldCountVertical
     *            Anzahl der Felder in vertikaler Richtung
     * @param countCharactersPerHorizontalField
     *            Anzahl der Zeichen pro Feld in horizontaler Richtung (Breite
     *            eines Feldes)
     * @param countCharactersPerVerticalField
     *            Anzahl der Zeichen pro Feld in vertikaler Richtung (Höhe eines
     *            Feldes)
     */
    public void printMuster(final int fieldCountHorizontal, final int fieldCountVertical,
            final int countCharactersPerHorizontalField, final int countCharactersPerVerticalField) {

        // Vertikale Höhe
        for (int i = 0; i < fieldCountVertical; i++) {
            // Die Schleife ist für die Vertikale Höhe
            // Bei fieldCountVertical=2 würde es also so aussehen:
            // X.X.X.
            // X.X.X.
            //
            if (isEvenNumber(i)) {
                // Für den Wechsel der Zeichen
                // Hier werden die geraden Zahlen behandelt
                // In diesem Zweig wird für fieldCountVertical=2 folgende Zeile
                // ausgegeben:
                // X.X.X.
                for (int j = 0; j < countCharactersPerVerticalField; j++) {
                    // Bei countCharactersPerVerticalField=2 wird hier folgendes
                    // ausgegeben:
                    // X.X.X.
                    // X.X.X.
                    // Hier wird "X" als firstCharacter übergeben, da gerade
                    // Zahlen das "X" zuerst anzeigen
                    printHorizontalMuster(fieldCountHorizontal, countCharactersPerHorizontalField, "X", ".");
                    // Zeilenumbruch
                    System.out.println();
                }
            } else {
                // Für den Wechsel der Zeichen
                // Hier werden die ungeraden Zahlen behandelt
                // In diesem Zweig wird für fieldCountVertical=2 folgende Zeile
                // ausgegeben:
                // .X.X.X
                for (int j = 0; j < countCharactersPerVerticalField; j++) {
                    // Bei countCharactersPerVerticalField=2 wird hier folgendes
                    // ausgegeben:
                    // .X.X.X
                    // .X.X.X
                    // Hier wird "." als firstCharacter übergeben, da gerade
                    // Zahlen das "." zuerst anzeigen
                    printHorizontalMuster(fieldCountHorizontal, countCharactersPerHorizontalField, ".", "X");
                    // Zeilenumbruch
                    System.out.println();
                }
            }
        }
    }

    private void printHorizontalMuster(final int fieldCountHorizontal,
            final int countCharactersPerHorizontalField, final String firstCharacter, final String secondCharacter) {
        String character = "";
        // Horizontale Breite
        for (int i = 0; i < fieldCountHorizontal; i++) {
            // Die Schleife ist für die Horizntale Breite
            // Bei fieldCountHorizontal=2 würde es also so aussehen:
            // X.
            if (isEvenNumber(i)) {
                // Um zu entscheiden mit welchen Zeichen angefangen werden soll,
                // "X" oder "."
                // Dadurch entsteht der Wechsel "X" "."
                character = firstCharacter;
            } else {
                character = secondCharacter;
            }
            for (int j = 0; j < countCharactersPerHorizontalField; j++) {
                // Für die Anzahl der Zeichen pro Feld.
                // Ohne diese Schleife würde es so aussehen X.X.X.
                // Mit dieser Schleife hat das Feld die korrekte Anzahl. Bei
                // countCharactersPerHorizontalField=2
                // bspw. XX..XX..XX..
                System.out.print(character);
            }
        }
    }

    private boolean isEvenNumber(final int number) {
        if (number % 2 == 0) {
            // gerade Zahl
            return true;
        } else
            // ungerade Zahl
            return false;
        }
    }

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Erste Schritte Muster ausgeben in der Konsole - großes V Java Basics - Anfänger-Themen 5
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
B Dekorator Muster - Irgendwas stimmt hier doch nicht? Java Basics - Anfänger-Themen 4
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
1 Wie dieses Muster am einfachsten erkennen? Java Basics - Anfänger-Themen 32
H Muster mit verschachtelten Schleifen kreieren. Java Basics - Anfänger-Themen 2
Yasemin bahar Muster erkennen Java Basics - Anfänger-Themen 13
U Muster in einem Array erkennen Java Basics - Anfänger-Themen 8
F Quadrat Mit Muster Java Basics - Anfänger-Themen 15
J Muster und Schleifen Java Basics - Anfänger-Themen 33
R 2D Arrays mit vorgegebenem Muster Java Basics - Anfänger-Themen 2
E Arrays nach best Muster füllen Java Basics - Anfänger-Themen 4
K String nach bestimmtem Muster parsen Java Basics - Anfänger-Themen 3
P Sägezahn Muster Programm Java Basics - Anfänger-Themen 2
C Array Muster erzeugen Java Basics - Anfänger-Themen 2
J Erste Schritte zweidimensionales Array Muster befüllen. Java Basics - Anfänger-Themen 4
J Strukturierung mit MVC Muster Java Basics - Anfänger-Themen 20
J Array Muster mit true und false Java Basics - Anfänger-Themen 6
C Muster programmieren Java Basics - Anfänger-Themen 4
C Muster programmieren Java Basics - Anfänger-Themen 4
arti28 Erste Schritte For-Schleifen und While-Schleifen, String als Muster ausgeben. Java Basics - Anfänger-Themen 3
L Java Muster Java Basics - Anfänger-Themen 1
Todesbote String auf Muster überprüfen Java Basics - Anfänger-Themen 19
C Array Zickzack Muster Java Basics - Anfänger-Themen 3
P RegEx Muster mehrfach treffen Java Basics - Anfänger-Themen 2
M Muster erkennen. Idee: Fassade. Java Basics - Anfänger-Themen 3
Dit_ Regex | Muster {a}{b}{c} Java Basics - Anfänger-Themen 7
pindakaas Compiler geht nicht (Dekorator Muster) Java Basics - Anfänger-Themen 18
M Datentypen Strings nach Muster auslesen und verarbeiten Java Basics - Anfänger-Themen 5
S X Zeichnen als Muster ausgeben Java Basics - Anfänger-Themen 5
R Muster ausgeben Java Basics - Anfänger-Themen 4
H Muster ausgeben Java Basics - Anfänger-Themen 25
G String auf Muster prüfen Java Basics - Anfänger-Themen 5
O useDelimiter / Muster im Parameter (Pattern) Java Basics - Anfänger-Themen 6
S OOP Warum gleiche Instanz der Klasse? (Factory-Muster) Java Basics - Anfänger-Themen 13
L Sägezahn Muster Java Basics - Anfänger-Themen 4
C Muster mit Zweidimensionalen Arrays Java Basics - Anfänger-Themen 18
0 Applet mit folgendem Muster erstellen Java Basics - Anfänger-Themen 12
P Fragen zum Observer Muster und Datenbanken Java Basics - Anfänger-Themen 2
Z Muster Java Basics - Anfänger-Themen 9
J nach Muster in String suchen Java Basics - Anfänger-Themen 4
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
M Nicht genug Eingabemöglichkeiten in der Konsole Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
W char über die Konsole? Java Basics - Anfänger-Themen 7
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
I 12 Spalten von jeweils 30 Zahlen in Konsole ausgeben Java Basics - Anfänger-Themen 6
I Java auf der Konsole Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
C Ausgabe in der Konsole Java Basics - Anfänger-Themen 11
Zrebna Programm kann aus der Konsole nicht gestartet werden (in der IDE läuft es) Java Basics - Anfänger-Themen 2
J Konsole Java Basics - Anfänger-Themen 10
V Umgebungsvariable Genutzte Javaversion in der Konsole ändern Java Basics - Anfänger-Themen 5
N Tabelle schön in der Konsole ausgeben Java Basics - Anfänger-Themen 5
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
D Tabelle in der Konsole Java Basics - Anfänger-Themen 3
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
F Java auf Windows Konsole ausführen Java Basics - Anfänger-Themen 1
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
A Programm in Konsole Java Basics - Anfänger-Themen 4
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
Bun17 Keine Ausgabe in der Konsole Java Basics - Anfänger-Themen 2
L Input/Output Wurzelzeichen in der Konsole ausgeben | Brauche Hilfe Java Basics - Anfänger-Themen 6
E Compiler-Fehler Javac Windows vs Ubuntu /Script vs Konsole Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
M Arrays auf Konsole formatiert ausgeben Java Basics - Anfänger-Themen 7
L Input/Output Konsole in Farben schreiben Java Basics - Anfänger-Themen 4
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
O Etwas auf der Konsole ausgeben, usw. Java Basics - Anfänger-Themen 22
A Input/Output Prozess Output genauso in der Konsole ausgeben Java Basics - Anfänger-Themen 0
J Input/Output javac HelloWorld.java - Keine Textausgabe in der Konsole Java Basics - Anfänger-Themen 4
T Methoden Methode wird nicht auf Konsole ausgeführt Java Basics - Anfänger-Themen 3
T In Konsole darf nichts falsches eingetippt werden?! Java Basics - Anfänger-Themen 7
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
G Probleme mit Konsole Java Basics - Anfänger-Themen 4
J Zahlen aus Konsole einlesen Java Basics - Anfänger-Themen 1
C Input/Output Ein Spielbrett auf Konsole ausgeben Java Basics - Anfänger-Themen 2
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
F Wert in Linux auf die Konsole schreiben Java Basics - Anfänger-Themen 3
C Input/Output Einlesen von der Konsole mit InputStreamReader Java Basics - Anfänger-Themen 13
C Tannenbaum auf der Konsole ausgeben lassen Java Basics - Anfänger-Themen 12
Z AWT package -> keine Konsole? Java Basics - Anfänger-Themen 2
P Einlesen von der Konsole Java Basics - Anfänger-Themen 3
J Programm wird nicht auf der Konsole ausgeführt Java Basics - Anfänger-Themen 2
L Dialogbox statt Konsole verwenden Java Basics - Anfänger-Themen 5
B Konsole schließt sich sofort Java Basics - Anfänger-Themen 8
M Fortlaufende Konsole Java Basics - Anfänger-Themen 3
G Konsole gibt "alte" sachen aus Java Basics - Anfänger-Themen 3
L Konsole öffnen und Java Programm darin ausführen Java Basics - Anfänger-Themen 4
S Konsole Lanterna in NetBeans einbinden Java Basics - Anfänger-Themen 5
J ausgaben von der konsole in das fenster Java Basics - Anfänger-Themen 5
E Input/Output Konsole erkennt meinen Buchstaben nicht Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben