länge von wörtern betimmen

Status
Nicht offen für weitere Antworten.

mojito

Mitglied
hallo @ all

bin seit heute neu hier und hab auch glaich mal ne schöne anfänger-frage an euch. :bahnhof:

ich möchte ein kleines proggi schreiben, welches mir die anzahl der buchstaben der von mir eingegeben wörter mit einem "*" ausgibt. ausserdem soll sollen die wie ein histogramm pro wort untereinander ausgegeben werden.

als ungefair so:

dies ist 1 satz

*__*__*__*
*__*_____*
*__*_____*
*________*

^^die unterstriche dienen hier jetzt nur als platzhalter

ganz faul war ich auch nicht - aber ich komm' einfach nicht mehr weiter ???:L
ausserdem wird das programm durch eine exception unterbrochen
hier mein code:

Code:
public static void main(String[] args) {
		
		String Abfrage = "j";
				
		do
		{
			String[] Satz = new String[1];
			System.out.println("Gib was ein:");
			Satz[0] = Tools.stringEingabe();
			int laenge = Satz[0].length();
			char[] buchstabe = new char[laenge];
			
			for(int i=1; i<=Satz[0].length(); i++)
			{
				System.out.println(buchstabe[i] = '*');
				
			}
			
		
			System.out.println("Weiter? j/n");
			Abfrage = Tools.stringEingabe();
		}
		while(Abfrage.equals("j"));
	}

- die klasse "Tools" ist nur eine sammlung der einzelnen Eingabe-Methoden -

wäre echt nett wenn mir jemand von euch einen tipp geben könnte, damit ich weiter komme

DANKE schon mal

gruß
mojito
 
Array-Indizes sind 0-basiert; eine Iteration sollte also so aussehen:
Code:
 for ( int i=0; i<array.length; i++) { //--- i geht von 0 bis array.length-1
   whatever( array[i]);
}

Du lässt den Index von 1 bis einschließlich der Array-Länge laufen, wodurch a) das erste Element überlesen wird und b) beim Zugriff mit dem Index Array-Länge über das Ende hinaus gelesen wird, was eine ArrayIndexOutOfBoundsException auslöst.
 
cool das mit der exception hat sich erledigt - war auch wirklich nen blöder fehler.... :roll:

aber wie mache ich das für mehrere wörter hintereinander? ???:L
 
hmmm...

ich weiss einfach nicht, wie ich immer erst die jeweils ersten stellen der wörter erfassen kann, um dann wie im beispiel beschrieben der einzelnen stellen untereinander als "*" wiedergeben kann...

wäre wirklich fantastisch wenn mir da noch mal jmd nen tipp geben könnte...

gruß
mojito
 
kann sein dass du student bist und du das als übung bekommen hast?

Diese Aufgabe ist mir bekannt. Allerdings das mit den Sternen --untereinander-- darstellen ist schon "komplizierter", weil man da schon ein logisches denken für Schleifen und If-Bedingungen haben muss, was man als Programmieranfänger noch nicht so im Blut hat. Ich hab dieses Beispiel auch noch nicht geschafft, da ich mit der vertikalen Darstellung immer durcheinander komme. Sobald ich eine Lösung dafür habe, werde ich diese hier posten, werde es diese woche noch machen!
 
Ich will dir hier keine Komplettlösung geben, aber so als kleiner Tipp:
Den String kannst du mit derString.split(" "); (<-- Da ist ein Leerzeichen zwischen den Anführungszeichen) in einzelne Wörter aufteilen.
Zurück bekommst du ein String-Array mit den einzelnen Wörtern ohne Leerzeichen.
Dann kannst du noch die Länge der einzelnen Strings als int-Array speichern. Und dann überleg' mal, wie du das horizontal darstellen würdest. Und überleg' dir dann mal, wie man das wohl "umdrehen" könnte.
 
SUPER 😀 ...DANKE dieta...- genau das was ich suchte...ne komplett-loesung wollt ich ja gar nicht haben. --> nugut gewehrt hätte ich mich auch nicht 😳

werd's gleich mal einhacken....wenn's funzt (/oder auch nicht) dann sag ich bescheid
 
???:L hmm - ich komme mal wieder nicht weiter...

habe das
Code:
Satz[0].split(" ");
hineingezaubert und danach die länge des Strings anzeigen lassen, aber es hat immer noch die selbe länge - ausserdem kommt dann wieder die selbe ArrayIndexOutOfBoundsException die ich vorher hatte.

ich habe auch keine ahnung welche neuen Strings mir dann zurückgegeben werden... :cry:

@ dieta und alle anderen die sich vielleicht hiermit noch beschäftigen...: gebt mir bitte noch einen weiterne kleinen tipp.

"BITTE BITTE mit ganz viel Zuckerguß opben drauf" :?

Gruß
Mojito
 
Das Problem ist, dass du in der For-Schleife bei 1 anfängst zu zählen, der erste index eines Arrays ist in Java aber immer 0. So müsste deine Schleife richtig aussehen:
Code:
for(int i=0; i<Satz[0].length(); i++)
Der Letzte Index eines Arrays ist immer die Länge - 1.
Als Beispiel:
Code:
0 bla
1 blubb
2 irgendwas
Die Länge ist 3, aber da die Numemrierung der Indizies bei 0 beginnt, ist der Letzte Index 3 - 1, also 2.
[edit]Und wenn ich deinen Post richtig verstehe:
Du musst das Ergebnis von Satz[0].split ja auch irgendwo speichern:
Code:
String[] s = Satz[0].split(" ");
Und jetzt noch 2 Sachen:
1. Warum speicherst du die Eingabe nicht in einer normalen Variable, sondern in einem Array?
und 2. schreibt man Variablennamen normalerweise klein.
[/edit]
 
hi, ich würde besser


Code:
String[] einzelneWoerter = satz.split("\\s");


benutzen, dann hast du am schnellsten gelöst. Der eingegebene Satz (variable satz) wird aufgesplittet und ins das Array "einzelneWoerter" gespeichert.
 
Ich schon wieder ... 😉

also ich bin jetzt so weit:
Code:
public static void main(String[] args) {
				
		String Abfrage = "j";
				
		do
		{
			
			System.out.println("Gib was ein:");
			String satz = Tools.stringEingabe(); 
			String[] einzelWort = satz.split("\\s");
			
			for(int a=0; a<=50; a++)
			{
				int laenge = einzelWort[a].length();
				char[] buchstabe = new char[laenge];
				
				for(int i=0; i<einzelWort[a].length(); i++)
				{
					System.out.print(buchstabe[i] = '*');
				}
				System.out.print("\n\n");
			}

			System.out.println("Weiter? j/n");
			Abfrage = Tools.stringEingabe();
		}
		while(Abfrage.equals("j"));
		

	}

nun habe ich aber wieder diese exception, die ich eigentlich behoben hab - meine for-Schleifen beiginnen alle mit "0". (war auch wirklich n dummer fehler.) 😳

nun werden meine wörter aber horizontal ausgegeben...
da hab ich gleich noch eine frage, gibt es eine möglichkeit, das ich erst immer den ersten "buchstaben" der arrays erfassen kann - diese dann horizontal ausgebe - nach dem zeilenumbruch dann die jeweils zweiten buchstaben usw...

...oder denke ich da jetzt zu kompliziert?

DANKE erstmal an dieta & ro252

gruß
mojito
 
Code:
char[] buchstabe = new char[laenge];
            
for(int i=0; i<einzelWort[a].length(); i++) {
      System.out.print(buchstabe[i] = '*');
}
System.out.print("\n\n");

dieser Code-Abschnitt ist völlig obskur, weil wozu brauchst du dieses Array überhaupt? Folgender Abschnitt tut's genauso:

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

mpG
Tobias

P.S.: Wg Exception: Sag mal wo die Exception auftritt - die Zeilenangabe bitte auf "Forumszeilen" konvertieren![/code]
 
Code:
a<=50

Kann ja nur klappen, wenn mindestens 51 Wörter eingegeben wurde...

mpG
Tobias
 
also wenn du "a<=50" hast, dann ist klar das ein fehler kommt, denn wenn du z.b. ein Satz mit 3 Wörtern schreibst, dann wird beim array 0,1 und 2 gefüllt, woher soll er sich 3...50 herholen?
 
:shock: na klar....ihr habt recht!!

hab den fehler nun behoben, indem ich natürlich nur die länge des array "einzelWort" dort einfüge...

da hab ich mal wieder nicht richtig nachgedacht!

hat schon jmd ne idee für die senkrechte darstellung?
 
Horizontale Darstellung: Äußere Schleife iteriert über den Gesamtsatz, innere Schleife über die Buchstaben des Einzelwortes.

Vertikale Darstellung: Äußere Schleife iteriert über die Buchstaben der Worte, innere Schleife über den Gesamtsatz. ACHTUNG: IndexOutOfBoundsException wenn nicht alle Wörter gleich lang sind. Wie man das abfängt, weißt du ja mittlerweile... length() und so.

Hoffe das reicht als Denkanstoß.
Tobias
 
Hallo noch mal...

vielleicht könntet ihr mir mal noch einen kleinen zusätzlich tipp geben...?? :cry:

ich komm einfach nicht weiter - horizontal funktioniert einwandfrei - aber vertikal krieg' ich das nicht hin!

wäre nett, wenn sich noch mal jemand von euch erbarmen würde, mir einen tipp zu geben.

danke nochmals @ all

bis denne
mojito
 
Wenn du die einzelnen Buchstaben der Ausgabe in einem zweidimensionalem Array speicherst, und dieses dann mit zwei for-Schleifen ausgifst, musst du für die vertikale Darstellung nur die Koordinaten vertauschen, also statt
Code:
System.out.print(array[x][y]);
das schreiben:
Code:
System.out.print(array[y][x]);
 
ich war doch wirklich zu blind!! :autsch:

jetzt klappt alles so wie es soll!

auch wenn's bestimmt keine mehr bracht hier der komplette code:

Code:
public static void main(String[] args) {
				
		String Abfrage = "j";
				
		do
		{
			
			System.out.println("Gib was ein:");
			String satz = Tools.stringEingabe(); 
			String[] einzelWort = satz.split("\\s");
		    int [] laenge = new int [einzelWort.length];
	    	int [] laengesortiert = new int [einzelWort.length];
		    
	    	System.out.println("unsortiert:");
	    	for (int a = 0; a < einzelWort.length; a++ ){
		    	
		    	laenge[a] = einzelWort[a].length();
		    	laengesortiert[a] = einzelWort[a].length();
		    	System.out.print(laenge[a] + " ");
		    }
		    System.out.print("\n");
		    System.out.println ("sortiert:");
		    Arrays.sort(laengesortiert);
		    for (int b = 0; b < einzelWort.length; b++ ){
		    	
	    	   	System.out.print(laengesortiert[b] + " ");
		    }
		    System.out.print("\n" + "Anzahl der Speicherplaetze im Array: ");
		    System.out.println (einzelWort.length);
		    System.out.print ("Maximaler Wert im Array: " + laengesortiert[einzelWort.length-1]);
		    System.out.print("\n");
		    System.out.print(satz+"\n");
		    for (int d = 0; d < laengesortiert[einzelWort.length-1]; d++){
		    	for (int e = 0; e < einzelWort.length; e++){
		    		if (laenge[e] > 0){
		    			System.out.print("*");
		    			laenge[e]--;
		    			}
		    		else{
		    			System.out.print(" ");
		    		}
		    		for(int a=0; a<einzelWort[e].length(); a++)
		    		{
		    			System.out.print(" ");
		    		}
		    	}
		    	System.out.print("\n");
		    }
			System.out.println("Weiter? j/n");
			Abfrage = Tools.stringEingabe();
		}
		while(Abfrage.equals("j"));

	}

trotzdem einen großen DANK an alle - alleine hätt ich's nie geschafft!!!

FROHE WEIHNACHTEN & NEN GUTEN RUTSCH INS NEUE JAHR!!!!

euer
Mojito
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben