Einfaches Quadrat auf der Console ausgeben lassen

Java4win

Aktives Mitglied
Hey,
Wir sollen ein ein Quadrat der Form(abhängig von n):
n = 2;
--
| |
| |
--

ausgeben lassen.
Mein Sourcecode sieht so aus:
Java:
int n = 10;

        for(int i = 0; i <= n; i++){
            if(i == 0){
                System.out.print(" ");
            }
            else{
            System.out.print("-");
            }
        }
        System.out.println();
        for(int a = 0; a < n; a++){
            for(int j = 0; j <= n+1; j++){
                if(j == 0){
                    System.out.print("|");
                }
                else if(j == n+1){
                    System.out.println("|");
                }
                else{
                    System.out.print(" ");
                }
        }
        }
        for(int i = 0; i <= n; i++){
            if(i ==0){
                System.out.print(" ");
            }
            else{
            System.out.print("-");
            }
        }

Es funktioniert, jedoch habe ich das Gefühl, dass es eine einfachere Lösung gibt.
Wie würdet ihr dieses "Problem" lösen?🙂
 
So sollte es aussehen bei n = 2
--
| |
| |
--

Edit: Ok es funktioniert nicht aber stellt euch einfach vor es wäre gerade.
Ich nehme an, es soll so aussehen:
Code:
 --
|  |
|  |
 --

Es funktioniert, jedoch habe ich das Gefühl, dass es eine einfachere Lösung gibt.
Du könntest deine for-Schleifen so aufbauen, dass sie nur das gewünschte Zeichen so oft ausgeben, wie du es brauchst. Die abweichenden Zeichen kannst du ausserhalb der for-Schleifen ausgeben. Dann sparst du dir die ganzen Fallunterscheidungen. Ausserdem könntest du Methoden einführen, um sich wiederholenden Code darin auszulagern.
 
Ich mach mit beim Wettbewerb der Quadrate:
Java:
public class Quadrat {
   
    // Konstanten für das Rechteck:
    final static char HL = (char)9472;     // Horizontale Linie
    final static char VL = (char)9474;     // Vertikale Linie
    final static char OL = (char)9484;     // Ecke oben links
    final static char OR = (char)9488;     // Ecke oben rechts
    final static char UL = (char)9492;     // Ecke unten links
    final static char UR = (char)9496;     // Ecke unten rechts

    public static void main(String[] args) {
        new Quadrat().printRect(2);
    }
   
    // n = Seitenlänge
    public void printRect(int n) {
        if (n < 0) {
            System.out.println("Kannste knicken; negative Seitenlängen mach ich nicht!");
        } else {
       
            char[] top = new char[2 + n];
            char[] bottom = new char[2 + n];
            char[] snueffelstueck = new char[2 + n];

            // Obere Linie:
            top[0] = OL; top[1 + n] = OR;
            for (int i = 1; i < 1 + n; i++) {
                top[i] = HL;
            }

            // Snüffelstück:
            snueffelstueck[0] = VL; snueffelstueck[1 + n] = VL;
            for (int i = 1; i < 1 + n; i++) {
                snueffelstueck[i] = ' ';
            }

            // Untere Linie:
            bottom[0] = UL; bottom[1 + n] = UR;
            for (int i = 1; i < 1 + n; i++) {
                bottom[i] = HL;
            }

            // Ausgabe:
            System.out.println(new String(top));
            for (int i = 0; i < n; i++) {
                System.out.println(new String(snueffelstueck));
            }
            System.out.println(new String(bottom));
        }
    }
}

Das Ergebnis formvollendet (hoffentlich stellt der Editor hier das richtig dar ;-) ):

Java:
┌──┐
│  │
│  │
└──┘

Herzlichen Gruß
Goldi
 
Hier sind noch zwei weitere Lösungsmöglichkeiten:
Java:
static String repeat(String s, int n) {
    String r = "";
    for(int i = 0; i < n; i++) {
      r += s;
    }
    return r;
  }

  static void quadrat(int n) {
    System.out.println("┌" + repeat("─", n) + "┐");
    System.out.print(repeat("│" + repeat(" ", n) + "│\n", n));
    System.out.println("└" + repeat("─", n) + "┘");
  }

Java:
static void quadrat(int n) {
    String line = "", spaces = "";
    for(int i = 0; i < n; i++) {
      line += "─"; spaces += " ";
    }
    System.out.println("┌" + line + "┐");
    for(int i = 0; i < n; i++) {
      System.out.println("│" + spaces + "│");
    }
    System.out.println("└" + line + "┘");
  }
Das muss man dann natürlich mit dem Argument "-encoding utf8" kompilieren.
 

Zurück
Oben