Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

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

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.

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

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();

        }

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.