JAVA String Problem

raumgleita

Cadet 4th Year
Registriert
Feb. 2008
Beiträge
119
Hallo Zusammen!

Ich kriege das mit meiner Ausgabe einach nicht gebacken. Also ich will eine solche Ausgabe:
Code:
*****************************
* Wählen Sie den Spielmodus *
* 0: Easy                   *
* 1: Hard                   *
*****************************
Also die hintern Punkte auf gleicher Ebene. Da dies ein Output ist und ständig ändert will ich den Text als Parameter übergeben und das Kästchen wird dann in der Output Methode "gezeichnet".
Da es unterschiedlich viel Zeilen sind, arbeite ich mit einem einzigen String und \n (Und nicht mit mehreren Parametern). Nun sollen alle Textteile bis \n erkannt werden die länge bestimmt werden und dann wird für jedes Textteil die länge bestimmt damit eine For-Schleife die Spaces bis zum letzten Sternchen setzen kann.
Mit einer Zeile funktioniert das einwandfrei. Zum die \n erkennen arbeite ich mit einem BufferedReader und der readLine() Methode. Doch erkennt er die Umbrüche nicht wie er es bei Files tut. Vielleicht weil der Parameter vom Typ String ist? Ich glaube irgendwie, dass ich das ganz anders Lösen muss...

Hier noch meine Output Methode:
Code:
    public int output(String ouputText){
	int value = 0;
	int strLenght = outputText.length();
	
	StringReader sr = new StringReader(outputText);
	BufferedReader broutput = new BufferedReader(sr);
	try {
	    ouputText = broutput.readLine();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
	System.out.println("Stringlänge " + strLenght);
	int amountofspace = 84 - strLenght;
	String space = "";
	int temp = 0;
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	try{
	    do{
		System.out.println("****************************************************************************************");
		while (temp <= amountofspace){
		    space = space+" ";
		    temp++;
		}
		space = space + "*";
		System.out.println("* "+outputText+space); // \n für Zeilenumbruch
		System.out.println("****************************************************************************************");
		System.out.println("Anzahl spaces = " + temp);
		value = Integer.parseInt(br.readLine());
	    }
	    while (true);
	}	
	catch (IOException ioe) {
		ioe.printStackTrace();
	} 
	catch (NumberFormatException nfe) {
		nfe.printStackTrace();
	}
	return value;
    }

Und die Übergabe des String Parameter
Code:
outputText = ("Wählen Sie den Spielmodus \n" +
				"* 0: Easy \n" +
				"* 1: Hard ");
output(outputText);

Ich weiss das eine formatierte Consolen Ausgabe eigentlich sinnlos ist, doch mein Lehrer will es nun mal.

Vielen Dank für eure Hilfe

gruss raumgleita
 
Bevor ich mich da mal ran mache, ist dir bewusst das du einmal "ouputText" (ohne t) und einem "outputText" (mit t) verwendest? Hat mein Eclipse gleich angemeckert. Oder sind das tatsächlich zwei verschieden Strings?
 
Du bist mein Held! Das wars! Wegen einem "t" habe ich 3h Zeit verloren.
Ein solcher Fehler passiert einem nur wenn man so unter Zeitdruck steht wie ich gerade.:)
Hauptsache gelöst. Vielen vielen Dank!

Jetzt muss ichs noch hinkriegen, dass die richtige Anzahl Zeilen eingelesen werden. Ich glaube ich mache einfach einen 2. Parameter und dann eine For-Schleife welche Zeile für Zeile einliest...

Schönes Wochenende
gruss raumgleita
 
Leider war mir gerade langweilig .. und ich hab das mal selber gemacht :P
Er checked was die maximal länge ist und passt den output dementsprechend an.


Code:
/**
 * @author nox
 * 
 */
public class CBTEst {

   public static void main(String[] args) {
      String outputText = ("Wählen Sie den Spielmodus\n" + "* 0: Easy \n" + "* 1: Hard ");
      output(outputText);

   }

   /**
    * Output the given text as formated for console.
    * @param outputText the text to sent to SysOut.
    */
   private static void output(String outputText) {
      if (outputText == null || outputText.length() == 0) {
         return;
      }

      String[] lines = outputText.split("\\n");

      // check max length
      int maxLength = 0;
      for (String line : lines) {
         if (line.length() > maxLength) {
            maxLength = line.length();
         }
      }

      // output line
      System.out.println(redo(maxLength + 4, '*'));
      for (String line : lines) {
         StringBuilder outline = new StringBuilder();
         outline.append("* ");
         outline.append(line);
         outline.append(redo(maxLength - line.length(), ' '));
         outline.append(" *");
         System.out.println(outline.toString());
      }
      System.out.println(redo(maxLength + 4, '*'));
   }


   /**
    * re-print char(s) for the given count. 
    * @param pCount the amount of redos
    * @param pChar the char to reprint-
    * @return a line of chars.
    */
   private static String redo(int pCount, char pChar) {
      StringBuilder star = new StringBuilder();
      for (int ii = 0; ii < pCount; ii++) {
         star.append(pChar);
      }
      return star.toString();
   }
}

Der Output dazu sieht so aus:

Code:
*****************************
* Wählen Sie den Spielmodus *
* * 0: Easy                 *
* * 1: Hard                 *
*****************************
 
Zuletzt bearbeitet:
Zurück
Oben