# Konsolenausgabe zentrieren



## BenIP (22. Sep 2010)

Hallo, 
ich bin neu hier und programmier mit java eigentlich rein funktionele Sachen. Nun möchte ich aber privat ein kleines Programm schreiben bzw. hab es schon fertig nur ich würde gerne die Konsolenaussgabe (System.out.println) zentrieren. Hab zwar schon etwas rumgestöbert nur noch nichts Richtiges gefunden. Scheint ja keine fertige Methode für zu geben. Hab zumindest keine in der API gefunden *G*

Ich bräuchte das ganze ziemlich schnell... ok, ist meine Schuld da ich eigentlich dachte es irgendwie selbst rauszufinden nur naja, nicht geklappt. *schäm*

Wär wirklich extrem nett wenn einer schon einen copy & paste fähigen Code zu hätte oder besser noch ne Methode *G*
Kenn mich nämlich mit Strings und so gar nicht aus. Brauchen das fürs Sudium so selten. Und hab leider keine Zeit mich da intensiv mit zu beschäftigen.

Hoffe ihr könnt mir da helfen, wäre euch sehr dankbar.

LG,
Benny


----------



## Gast2 (22. Sep 2010)

Ich wüsste nicht dass man die Konsolenausgabe zentrieren kann.
Die einzige möglichkeit die mir einfällt wäre die richtige anzahl an leerzeichen vor jede zeile zu schreiben.

Dazu kannst du dir ne Methode schreiben die das für dich erledigt, die muss dann aber die breite der konsole kennen. (müsstest du vermutlich irgendwo als konstante im programm hinterlegen)


----------



## faetzminator (22. Sep 2010)

Nunja, du musst natürlich die Breite der Konsole bzw. deine gewünschte Breite kennen. Danach kannst du es einfach ausrechnen:

```
public void printCentered(String str, int width) {
    printChars(' ', (width - str.length()) / 2);
    System.out.println(str);
}

protected void printChars(char c, int len) {
    for (int i = 0; i < len; i++) {
        System.out.print(c);
    }
}
```


----------



## Der Müde Joe (22. Sep 2010)

>Nun möchte ich aber privat ein kleines Programm schreiben

>ch bräuchte das ganze ziemlich schnell...

Der private Abgabetermin rückt näher ;-)


Was heisst zentriert? Ein paar Tabs und ein paar leerzeichen und schon ist mehr rechts.
Zentriert ist unmöglich. Für das müsste man die Zeilenlänge der Konsole wissen

Es gibt auch noch
PrintWriter (Java Platform SE 6)


----------



## MiDniGG (22. Sep 2010)

Außerdem ist die Konsolenschriftart monospaced... Das heißt, dass es unmöglich ist ein Hallo Welt zu zentrieren, da alle Zeichen gleich lang sind...


----------



## BenIP (22. Sep 2010)

Schonmal danke für die schnellen Antworten! 

Vorallem für den Code, werd mal etwas mit rum spielen *G*

Kann ich die Breite der Konsole nicht irgendwie abrufen? 

Muss um ehrlich zu sein auch nicht wirklich zentriert sein. Im Grunde geht es darum. 
Es wird ein Text ausgegeben, Zeile für Zeile mit ner kleinen Verzögerung. Soll sone Art "Gedichtform" haben da die Sätze eben nicht gleich lang sind und Rechtsbündig blöd aussieht. Hab schon versucht einfach manuell die Leerzeilen zu berechnen nur irgendwie klappt das ja nicht. Wahrscheinlich echt weil die Zeichen unterschiedlich lang sind.


LG,
Benny


----------



## ARadauer (22. Sep 2010)

nimm die maximale Zeilen länge als Konsolen Länge, das schaut sicher nett aus. Bzw vielleicht noch einwenig was dazu...

mit den Methoden von faetzminator 


```
public class Gedicht {
   public static void main(String[] args) {
      ArrayList<String> lines = new ArrayList<String>();
      
      lines.add("In die Schule");
      lines.add("geh ich gern");
      lines.add("weil ich dort");
      lines.add("was blödes");
      lines.add("lern");
      
      int max = 0;
      for(String line : lines){
         if(line.length()> max)
            max = line.length();
      }
      
      max+=10;
      
      for(String line: lines)
         printCentered(line, max);
         
   }

   
   public static void printCentered(String str, int width) {
      printChars(' ', (width - str.length()) / 2);
      System.out.println(str);
  }
   
   public static void printChars(char c, int len) {
      for (int i = 0; i < len; i++) {
          System.out.print(c);
      }
  }
}
```

fein...


----------



## BenIP (22. Sep 2010)

@ ARadauer
Danke, probier ich gerade aus *G*

LG,
Benny


----------



## MiDniGG (22. Sep 2010)

Dann importier sie. (Mit Eclipse STRG+O) ansonsten vor "public class..." einfach "import java.util.ArrayList;" einfügen.


----------



## BenIP (22. Sep 2010)

Danke, hab ich grad selbst gemerkt. *G* Sitz wohl schon wieder zu lange vorm PC *G*

Ok, geht alles wunderbar. Danke euch allen herzlich. Ist echt ein cooles Forum hier!

LG,
Benny


----------



## Der Müde Joe (22. Sep 2010)

```
int cols = 20;
for(int i = 0; i < 20 ; i++) {
    StringBuilder builder = new StringBuilder();
    for(int strLenght = 0 ; strLenght < new Random().nextInt(15) + 5;strLenght++) {
        builder.append('a');
    }
    String s = builder.toString();
    System.out.printf("%"+(cols-s.length()/2 )+"s%s\n" , " ", s );
}
```

Wenn wir grad schon lösungen haben: printf ;-)


----------

