formatierung

Status
Nicht offen für weitere Antworten.

Acidburn1982

Mitglied
hallo hab da mal ne frage: habe untenstehend die 2 klassen meines projektes.
Klasse 1: ...Tastatur

Code:
import java.io.*;
public class Tastatur {

	/**
	 * @param args
	 */
	public static String readString()
	{
		BufferedReader eingabe = new 
			BufferedReader(new InputStreamReader(System.in));
		
		try
		{
			return eingabe.readLine();
		}
		catch(IOException e)
		{
			System.out.println(e);
			return new String("");
		}
	}
	
	public static char readChar()
	{
		BufferedReader eingabe = new 
			BufferedReader(new InputStreamReader(System.in));
		String line="";
		char zeichen='0';
		try
		{
			line=eingabe.readLine();
			if (line.length()>0)
				zeichen=line.charAt(0);
				return zeichen;
		}
		catch(Exception e)
		{
			System.out.println(e);
			return '0';
		}
		
	}
	
	
	public static int readInt()
	{
		BufferedReader eingabe = new 
			BufferedReader(new InputStreamReader(System.in));
		String line="";
		
		try
		{
			line=eingabe.readLine();
		}
		catch(IOException e)
		{
			System.out.println(e);
		}
		try
		{
			return (new Integer(line)).intValue();
		}
		catch (Exception e)
		{
			return 0;
		}
	}
	
	public static float readFloat()
	{
		BufferedReader eingabe = new 
			BufferedReader(new InputStreamReader(System.in));
		String line="";
		
		try
		{
			line=eingabe.readLine();
		}
		catch(IOException e)
		{
			System.out.println(e);
		}
		try
		{
			return (new Float(line)).floatValue();
		}
		catch (Exception e)
		{
			return 0;
		}
	}
	

	public static double readDouble()
	{
		BufferedReader eingabe = new 
			BufferedReader(new InputStreamReader(System.in));
		String line="";
		System.out.flush();
		
		try
		{
			line=eingabe.readLine();
		}
		catch(IOException e)
		{
			System.out.println(e);
		}
		try
		{
			return (new Double(line)).doubleValue();
		}
		catch (Exception e)
		{
			return 0;
		}
	}
	
}

und Klasse2: ...die Main

Code:
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char a;
		do{
			String zk;
			zk=Tastatur.readString();
			//String input = zk;
			String[] results = zk.split(" ");
			for (int i = 0; i < results.length; i++)
			{
			
				System.out.print(results[i]+" ");
				
			}
			System.out.println();
			for(int i=0; i<results.length; i++)
			{
				for(int k=0; k<results[i].length();k++)
				{
					
					System.out.print("*");
					
				}
				System.out.print(" ");
			}
			System.out.println();			
			System.out.println("erneute Eingabe(j/n)?");
			
			a=Tastatur.readChar();
		}
		while(a!='n');	
	}

}

...nun zu meinem Problem: Die Sternchen werden zwar unter die Wörter geschrieben, worauf ich schonmal total stolz bin :) aber ich hätte sie gerne senkrecht am ersten buchstaben jedes wortes, in der form...


Wort
*
*
*
*



Hoffe man kann mir hier helfen! bekomme langsam ne Macke!
Danke in Vorraus!
MfG Acid...
 
G

Gast

Gast
Verusch mal das:
Code:
for(int k=0; k<results[i].length();k++)
            {
               
               System.out.println("*");
               
            }

oder
Code:
for(int k=0; k<results[i].length();k++)
            {
               
               System.out.print("*\n");
               
            }
 

Zunera

Aktives Mitglied
Hi,

es sollen also soviel Sterne, wie das Wort lang ist, unter das entsprechende Wort? Ich geh mal davon aus, dass das die Aufgabenstellung ist... So könnte deine main Methode aussehen:

Code:
public static void main(String[] args) {
        // TODO Auto-generated method stub
        char a;
        do{
           int maxLength = 0;
           
           String zk;
           zk=Tastatur.readString();
           //String input = zk;
           String[] results = zk.split(" ");
           for (int i = 0; i < results.length; i++)
           {
           
              System.out.print(results[i]+" ");
              
              maxLength = Math.max(maxLength, results[i].length());
           }
           System.out.println();
           for(int i=0; i<maxLength; i++)
           {
              for(int j = 0; j < results.length; j++)
              {
                  if(i < results[j].length())
                      System.out.print("*");
                  else 
                      System.out.print(" ");
                  
                  for(int k=0; k < results[j].length(); k++)
                  {
                      System.out.print(" ");
                  }
              }
              System.out.println();   
           }
           
           System.out.println();
           System.out.println("erneute Eingabe(j/n)?");
           
           a=Tastatur.readChar();
        }
        while(a!='n');   
     }

Vielleicht nicht super elegant aber es tut :D

Grüße
 

Acidburn1982

Mitglied
Danke @ zunera! klappt super! wär total nett wenn du die If-Anweisung noch kurz kommentieren könntest?!! Da versteh ick noch nich ganz was die macht! :/

Ansonsten Danke nochmal.... *jippi*

Code:
 for(int i=0; i<maxLength; i++)  //solange wie längstes Wort
           {
              for(int j = 0; j < results.length; j++)  //solange wie Anzahl der Wörter
              {
            	  if(i < results[j].length())  //???
            		  System.out.print("*");
            	  else
            		  System.out.print(" ");
                 
            	  		for(int k=0; k < results[j].length(); k++)
            	  		{
            	  			System.out.print(" ");
            	  		}
 

Zunera

Aktives Mitglied
Code:
for(int i=0; i<maxLength; i++)  //solange wie längstes Wort - i zählt Anzahl "Zeilen"/Wortlängen
           {
              for(int j = 0; j < results.length; j++)  //solange wie Anzahl der Wörter - j zählt Anzahl "Spalten"/Wörter
              {
                 if(i < results[j].length())  //wenn Länge des j-ten Wortes größer als die aktuelle Zeile (also auch "Wortlänge"), die gerade aktuell ist...
                    System.out.print("*"); //...mache Sternchen an die Stelle unter das Wort
                 else
                    System.out.print(" "); //sonst Leerzeichen
                 
                 //nicht einrücken! Ist nicht teil der IF-Anweisung!
                 for(int k=0; k < results[j].length(); k++)  //fülle die "Spalte" mit Leerzeichen bis zum nächsten Wort auf
                 {
                       System.out.print(" ");
                 }

Hoffe, es ist einigermaßen verständlich... ist ja fast selbsterklärend! :cool:
 
G

Guest

Gast
Hab mal noch ne Frage zu der Aufgabe:
Ich hab das gleiche mit nem 2d Array gemacht.
Allerdings bekomm ich ne IndexoutofBound Fehlermeldung bei der Ausgabe:
mein Code für die Ausgabe sieht so aus:
Code:
 for ( int zeile = 0; zeile < ausgabe.length; zeile++ ) 
       { 
           
         for ( int spalte=0; spalte < ausgabe[zeile].length; spalte++ ) 
            
         { 
            
            System.out.print( ausgabe[zeile][spalte]); 
           
            for (int r=0;r<eingabe.length;r++)                   // ab hier ist der Fehler. 
               {                                                        
               for (int a=0;a<eingabe[spalte].length();a++)          

               
                  { 
                 System.out.print(" "); 
                  }

Was muss ich ändern dami die Fehlermeldun weg geht?
 

Zunera

Aktives Mitglied
Was muss ich ändern dami die Fehlermeldun weg geht?
Dein Codeausschnitt ist nicht ausreichend genug, um genau zu sagen, was falsch ist. Ich vermute aber mal, dass du das Array "ausgabe" nicht ordentlich initialisiert hast. Am besten, du postet nochmal die ganze Methode und die genaue Fehlermeldung mit Indexangabe, dann könnte ich sicher etwas sagen...
 
G

Guest

Gast
Ok, hier mein ganzer Code:
Code:
public class test {
	 public static void main( String[] arg )
	  {	 
		 
	for (int q=0;;q++)
	{
		 int maxLength = 0; 
		 
		 System.out.println("Satz eingeben:");
		 
		 String trennen = Einlesen.readString();
		 String ohneLeerzeichen = trennen.replaceAll(" ", "");
		 
		 String[] eingabe = trennen.split(" ");
		 //längstes Wort der Eingabe
		 for (int i = 0; i < eingabe.length; i++)
		 {
            maxLength = Math.max(maxLength, eingabe[i].length());
         } 
		 String ausgabe[][] = new String[maxLength][25];
		 
		 
		
		 
		 
		// Anlegen eines Arrays mit Leerzeichen
		for ( int i=0;i<ausgabe.length;i++ )
		{
			for (int j=0; j<ausgabe[i].length;j++ )
					{
					ausgabe [i][j] =" ";
					}
		}
		
		// Füllen des Arrays mit Buchstaben
		for (int y=0;y<eingabe.length;y++) //so oft wie das array Objekte hat
	    {
	    	
			for (int t=0;t<eingabe[y].length();t++) // so oft wie die einzelenen Wörter das arrays lang sind
			{
                	ausgabe[t][y]= "*";
			}
	    }
	
		
	    // das Array ausgeben
		
	
	    for ( int zeile = 0; zeile < ausgabe.length; zeile++ )
	    {
	    	
	      for ( int spalte=0; spalte < ausgabe[zeile].length; spalte++ )
	    	  
	      { 
	    	
	    	  System.out.print( ausgabe[zeile][spalte]);
	    	
	    	 /* for (int g=0;g<2;g++) // problem: er nimmt immer die größte zahl (hier 2)
	    	  {
	    		 
	    		   for (int a=0;a<eingabe[g].length();a++)
	    		  
	  	    		{
	    			  
	                    System.out.print(" ");
	                    
	    			   
	    			
	  	    		}
	    	  }*/
	    	
	    		 
	      
	      
	      
	    }
	      System.out.println();
	    }
	    /*System.out.println("Erneute Eingabe? (j/n)");
	    String beenden = Einlesen.readString();
		if (beenden.equals("n")) 
			{
			System.out.println();
			System.out.println();
		System.out.println("Programm beendet");
		break;
			}
		else System.out.println("Programm wird neu gestartet");
		System.out.println();
		*/
		}
	    
		 
	  }
	
	
	
	
}
 

Zunera

Aktives Mitglied
Die "problematische" Stelle (die bei dir gerade auskommentiert ist) muss wie folgt aussehen:

Code:
for (int a = 0;a < eingabe[spalte].length();a++)
{
    System.out.print(" ");
}
Es reicht also eine FOR-Schleife, um die Abstände zu korrigieren, da du mit der Spaltenschleife ja schon alle Worte durchläufst.
Aber diese Änderung allein führt zu der NullPointerException, was wirklich auf eine fehlerhafte Initialisierung von "ausgabe" zurückzuführen ist. Deine Zeile Nr 21 sollte wie folgt lauten:
Code:
String ausgabe[][] = new String[maxLength][eingabe.length];
Hoffe, die Erklärung hilft... :cool:
 
T

Tonic

Gast
JUHU DANKE!!!!!!!!!!!!!!!!
das mit nur einer Schleifen hatte ich auch mal, aber das das Array falsch ist, da kam ich nicht drauf.
VIELEN DANK nochmal! :D :D :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Code-Formatierung Java Basics - Anfänger-Themen 2
J Spezielle Ausgabe Formatierung Java Basics - Anfänger-Themen 4
P Problem mit richtiger Formatierung :( Java Basics - Anfänger-Themen 1
T Formatierung von Zahlen (Tausendertrennzeichen) Java Basics - Anfänger-Themen 2
T Problem mit double-Formatierung Java Basics - Anfänger-Themen 3
U kompilieren geht nicht wg. Formatierung wahrscheinlich Java Basics - Anfänger-Themen 7
T Tabellarische Formatierung beziehungsweise Ausgabe Java Basics - Anfänger-Themen 4
B JLabel Text Formatierung Java Basics - Anfänger-Themen 5
O Text Formatierung Java Basics - Anfänger-Themen 13
I Input/Output System.out.println formatierung? möglich? Java Basics - Anfänger-Themen 2
H html-Text mit Formatierung in String speichern Java Basics - Anfänger-Themen 4
E Formatierung der Ausgabe Java Basics - Anfänger-Themen 6
D Time Formatierung - Falsches Resultat Java Basics - Anfänger-Themen 4
T JPanel formatierung Java Basics - Anfänger-Themen 3
B Random Zahlen und Formatierung Java Basics - Anfänger-Themen 6
A Frage bei der Formatierung von SimpleDateFormat Java Basics - Anfänger-Themen 7
F XML-Formatierung Java Basics - Anfänger-Themen 4
A Formatierung Java Basics - Anfänger-Themen 3
G JTable formatierung von zahlen Java Basics - Anfänger-Themen 2
A Formatierung Java Basics - Anfänger-Themen 4
S .txt ausgabe / Formatierung Java Basics - Anfänger-Themen 2
N formatierung aus printf in string verwenden Java Basics - Anfänger-Themen 3
J jadfq - Formatierung von Doubles Java Basics - Anfänger-Themen 8
D Formatierung: ganzzahlige Float Werte nach Int Java Basics - Anfänger-Themen 2
B Formatierung beim Drucken Java Basics - Anfänger-Themen 4
vogella String von Formatierung befreien Java Basics - Anfänger-Themen 15
U Übername der texfield formatierung Java Basics - Anfänger-Themen 3
S HTML mit CSS-Formatierung aus Java erzeugen Java Basics - Anfänger-Themen 5
D Suche ActionListener und Formatierung für Textfelder Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben