Zum Inhalt springen

gittermuster in java programmieren


cable545

Empfohlene Beiträge

hallo,

also erstmal zur info: ich bin anfänger.

nun zu meinem problem. ich möchte eine funktion schreiben welche als parameter zwei int werte übernimmt und ein string-ergebnis liefert. die funktion baut je nach parameter ein gitter zusammen. sind die zwei int werte zum beispiel 2 und 3 sieht das gitter so aus:

+-+-+

| | |

+-+-+

| | |

+-+-+

| | |

+-+-+

sind die werte 1 und 1

so:

+-+

| |

+-+

bei 0 und 2 so:

+

|

+

|

+

und bei 3 und 0 zum beispiel so:

+-+-+-+

die zeichenkette soll dann in ein StringBuilder-Objekt zusammen gebaut werden. ich würde das ganze gerne mit schleifen zusammen basteln. kann mir da jemand helfen?

edit: ok, ich sehe gerade dass das nicht so aussieht wie es aussehen soll. die senkrechten striche sollen immer genau unter dem plus stehen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Versuche dein Problem im Pseudocode aufzuschreiben. Kleiner Hinweis: Ich würde jeweils in x und y Richtungen for-Schleifen verwenden. Male es dir notfalls auf.

Überlege dir: Was ist hier eine Zeile? Was ist hier eine Spalte?

Weiterhin: Auf der Konsole kannst du nur zeilenweise ausgeben. Zeilenumbrüche in Strings kannst du mit dem Steuerzeichen "\n" realisieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok. ich danke dir für deine antwort. jedoch ist mein problem die direkte schleifenkonstruktion. ich hab da an eine doppelte schleife gedacht. der index der äußeren schleife für den einen parameter der funktion und der index der inneren schleife für den anderen parameter. ich bekomme jedoch immer irgendwelche komischen konstrukte. ich hab es genau so ausprobiert wie in deiner antwort beschrieben. ich hab zwei strings vereinbart und sie initialisiert mit "+"+"-"+"+"+"\n" und der andere mit"|"+ " "+"\n". und das in allen kombinationen und variationen. und je nachdem ob der index gerade oder ungerade ist wurde dann was ausgegeben. aber irgendwie steh ich aufn schlauch.

Bearbeitet von cable545
Link zu diesem Kommentar
Auf anderen Seiten teilen

Versuche erst mal kleine Schritte. Wie sieht es aus wenn du nur "+" als Zeichen hast.

z.b:


public string generiereMuster(int x, int y) 

{

StringBuilder sb = new StringBuilder()


// TODO



return sb.toString()

}

bei

System.out.printLn(generiereMuster(3,4)

Hättest du dann die Ausgabe:

+++

+++

+++

+++

Wenn du die Logik für die Ausgabe erst mal hin bekommen hast, kannst du die Generierung erweitern. Der nächste Schritt währe, zu überlegen, was sich wiederholt, und was nur einmal passiert. Mal dir mal das Muster noch mal auf:

+-+-+-+

| | | |

+-+-+-+

| | | |

+-+-+-+

| | | |

+-+-+-+

| | | |

+-+-+-+

Was wiederholt sich in x-Richtung, was kommt nur einmal in x-Richtung vor? Das was nur einmal vorkommt, kann nicht Inhalt der Schleife sein. (z.B. das "\n"-Zeichen). Schaue dir das für jede Zeile an.

In y-Richtung das Selbe. Hier hast du das y-Fache der Ausgabe in x-Richtung. Und auch hier hast du Elemente die sich wiederholen, und welche die dies nicht tun.

Schreib dir das ganze in Pseudocode auf.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok, hab jetzt mein problem gelöst. war jetzt soweit das ich für die y-richtung bei zum beispiel einem parameter von 2 immer nur eine zeile mit +-+ usw und eine zeile mit | usw bekommen hab. ich muss jedoch den übergebenen wert für die y-richtung verdoppeln und noch eins dazu addieren. denn der parameter in y-richtung steht ja sozusagen für die senkrechten striche.

so sieht das jetzt aus:


static public String gitter(int weite,int hoehe) {


    StringBuilder raster=new StringBuilder();


    if(weite<0)  weite=Math.max(weite,0);

    if(hoehe<0) hoehe=Math.max(hoehe,0);

    hoehe=(hoehe*2)+1;                   




    for(int h=1;h<=hoehe;h++) {

      if(h==1) raster.append("+");

      if(h%2==0) raster.append("\n"+"|");

      if(h>1 && !(h%2==0)) raster.append("\n"+"+");


      for(int w=1;w<=weite;w++) {

	 if(h%2==0) raster.append(" "+"|");

	 else raster.append("-"+"+");


      }


    }raster.append("\n");

          return raster.toString();

}

ich danke dir für die ratschläge

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gern geschehen,

Hier auch noch eine Möglichkeit:

Folgendes wiederholt sich:


[COLOR="Red"]+-[/COLOR]+-+-+-+-[COLOR="#006400"]+[/COLOR]

[COLOR="#ff0000"]| [/COLOR]| | | | [COLOR="#006400"]|[/COLOR]

[COLOR="Blue"]+-+-+-+-+-[/COLOR][COLOR="#006400"]+[/COLOR]

[COLOR="#0000ff"]| | | | | [/COLOR][COLOR="#006400"]|[/COLOR]

+-+-+-+-+-[COLOR="#006400"]+[/COLOR]

| | | | | [COLOR="#006400"]|[/COLOR]

+-+-+-+-+-[COLOR="#006400"]+[/COLOR]

| | | | | [COLOR="#006400"]|[/COLOR]

+-+-+-+-+-[COLOR="#006400"]+[/COLOR]

| | | | | [COLOR="#006400"]|[/COLOR]

+-+-+-+-+-[COLOR="#006400"]+[/COLOR]

| | | | | [COLOR="#006400"]|[/COLOR]

[COLOR="DarkOrange"]+-+-+-+-+-+[/COLOR]


[COLOR="Red"]Rot:[/COLOR] Wiederholt sich x mal in x-Richtung

[COLOR="DarkGreen"]Grün:[/COLOR] Einmal pro Zeile

[COLOR="DarkOrange"]Orange:[/COLOR] Letzte Zeile

[COLOR="Blue"]Blau: [/COLOR]Wiederholt sich y mal in y-Richtung


public String generateGitter(int x, int y)

        {

            sb = new StringBuilder();

            [COLOR="Blue"]for (int i = 0; i < y; i++)[/COLOR]

            {

                for (int j = 0; j < x; j++)

                {

                    sb.append("[COLOR="Red"]+-[/COLOR]");

                }

                sb.append("[COLOR="DarkGreen"]+[/COLOR]\n");


                for (int j = 0; j < x; j++)

                {

                    sb.append("[COLOR="Red"]|[/COLOR] ");

                }

                sb.append("[COLOR="DarkGreen"]|[/COLOR]\n");


            }

            [COLOR="DarkOrange"]for (int j = 0; j < x; j++)[/COLOR]

            {

                sb.append("[COLOR="DarkOrange"]+-[/COLOR]");

            }


            if (x <= 0 && y <= 0) return "";


            sb.append("[COLOR="#ff8c00"]+[/COLOR]\n");


            return sb.toString();

        }

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...