Konsolenausgabe zentrieren

BenIP

Mitglied
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
 
G

Gast2

Gast
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

Gesperrter Benutzer
Nunja, du musst natürlich die Breite der Konsole bzw. deine gewünschte Breite kennen. Danach kannst du es einfach ausrechnen:
Java:
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

Top Contributor
>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)
 
M

MiDniGG

Gast
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

Mitglied
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

Top Contributor
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

Java:
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...
 
M

MiDniGG

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

BenIP

Mitglied
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

Top Contributor
Java:
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 ;-)
 

Ähnliche Java Themen


Oben