cable545 Geschrieben 16. November 2009 Teilen Geschrieben 16. November 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 16. November 2009 Teilen Geschrieben 16. November 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
cable545 Geschrieben 16. November 2009 Autor Teilen Geschrieben 16. November 2009 (bearbeitet) 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 16. November 2009 von cable545 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 17. November 2009 Teilen Geschrieben 17. November 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
cable545 Geschrieben 18. November 2009 Autor Teilen Geschrieben 18. November 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 18. November 2009 Teilen Geschrieben 18. November 2009 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(); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.