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...
 
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");
               
            }
 
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 😀

Grüße
 
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(" ");
            	  		}
 
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! 😎
 
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?
 
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...
 
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();
		*/
		}
	    
		 
	  }
	
	
	
	
}
 
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... 😎
 
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! 😀 😀 😀
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben