Ich habe für die Uni ein Programm geschrieben, was einen eingelesenen Satz in ein Histogramm umwandelt. Die Schwierigkeit dabei ist, es können beliebig viele Leerzeichen vor dem ersten Wort und zwischen den Wörtern stehen. Auch soll das Histogramm immer genau unter dem ersten Buchstaben des jeweiligen Wort ausgegeben werden. Es geht um diese Aufgabe:
Übungsblatt "Arrays"
An sich fertig ist das Programm fertig und funktioniert so wie es soll, aber nur solange vor dem ersten Wort keine Leerzeichen stehen. Sobald ich da ein Leerzeichen davor schreibe, kriege ich ArrayIndexOutOfBoundsException.
Vielleicht kann einer von euch das mal kurz testen und mir sagen wo der Fehler ist. Ich finde ihn nämlich nicht.
Bsp - so gehts:
so kriege ich den Error:
hier noch die main() dazu:
Übungsblatt "Arrays"
An sich fertig ist das Programm fertig und funktioniert so wie es soll, aber nur solange vor dem ersten Wort keine Leerzeichen stehen. Sobald ich da ein Leerzeichen davor schreibe, kriege ich ArrayIndexOutOfBoundsException.
Vielleicht kann einer von euch das mal kurz testen und mir sagen wo der Fehler ist. Ich finde ihn nämlich nicht.
Bsp - so gehts:
Code:
heute regnet es morgen vielleicht auch
Code:
heute regnet es morgen vielleicht auch
Java:
package paketHistrogram;
import java.util.Scanner;
public class Histogram {
private String satz;
private String[] wort;
private String[] leerZ;
private int wortLeerZ;
private int maxLang;
private String zeile;
private String weiter;
public void einlesen() {
Scanner einlesen = new Scanner(System.in);
System.out.println("Bitte geben Sie einen Satz ein!");
satz = einlesen.nextLine();
wort = satz.split("\\s+");
leerZ = satz.split("\\w+");
//Dieser Teil ist nur zur Ueberpruefung
// for (int i = 0; i < leerZ.length; i++) {
// System.out.printf("ArrayLeerZ[%d]: |%s| \n", i, leerZ[i]);
// }
}
public void leerzPlusWortlaenge() {
for (int i = 1; i < leerZ.length; i++) {
wortLeerZ = (wort[i-1].length() -1);
for(int j = 0; j < wortLeerZ; j++) {
leerZ[i] += " ";
}
}
}
public void maxWortLaenge() {
maxLang = 0;
for (int i = 0; i < wort.length; i++) {
if(wort[i].length() > maxLang) {
maxLang = wort[i].length();
}
}
}
public void ausgabe() {
for (int spalte = 0; spalte < maxLang; spalte++){
zeile = "";
for (int i = 0; i < wort.length; i++){
if (wort[i].length() <= spalte){
zeile += (leerZ[i] + "-");
}else{
zeile += (leerZ[i] + "*");
}
}
System.out.println(zeile);
}
//Dieser Teil ist nur zur Ueberpruefung
// System.out.println();
// for (int h = 0; h < wort.length; h++) {
// System.out.printf("ArrayWort[%d]: |%s| \n", h, wort[h]);
// }
// System.out.println();
// for (int i = 0; i < leerZ.length; i++) {
// System.out.printf("ArrayLeerZ[%d]: |%s| \n", i, leerZ[i]);
// }
// System.out.printf("\nMax Laenge: %d\n\n", maxLang);
}
public void weiter() {
Scanner einlesen = new Scanner(System.in);
System.out.println("\nNochmal? (j / n)");
weiter = einlesen.next();
if(weiter.equals("n")) {
System.out.println("Schoenen Tag noch!");
}
}
public String getWeiter() {
return weiter;
}
}
Java:
package paketHistrogram;
public class HistogramStart {
public static void main(String[] args) {
Histogram histo = new Histogram();
do {
histo.einlesen();
histo.leerzPlusWortlaenge();
histo.maxWortLaenge();
histo.ausgabe();
histo.weiter();
} while( histo.getWeiter().equals("j") );
}
}
Zuletzt bearbeitet: