Hallo
ich muss folgende Aufgabe lösen:
Implementieren Sie ein Programm zum Darstellen eines Histogramms. Die Daten sollen als Array von double-Werten gegeben sein, z.B.:
double[] data1 = {
1.1, 1.9, 2.2, 3.0, 5.1, 5.2, 4.3, 0.1, 4.5, 5.1
};
double[] data2 = {
8.0, 6.0, 4.0, 1.0, 2.0, 3.0, 4.0, 9.0
};
Sie brauchen sich nicht um die Eingabe der Daten zu kümmern. Das Array der Daten soll beliebig sein, kann aber als Variable fest im Programm deklariert sein. Die Daten sollen als einfaches Balkendiagramm in ASCII dargestellt werden. Dazu benötigen Sie lediglich die Funktion System.out.println. Sind die Daten zum Beispiel wie oben gegeben, dann könnte die Ausgabe zum Beispiel so aussehen:
6| X
5| XX X
4| XXX XX
3| XXXX XX
2| XXXXXX XX
1| XXXXXXXXX
+ --3--6--9--
Hinweis:
Beachten Sie, dass die Länge des Eingabe-Arrays unterschiedlich groß sein kann;
und dass im Array beliebig große Wert enthalten sein können.
Und das habe ich bisher:
Das Problem ist, dass ich denke, dass mein Code funktionieren müsste, aber die Console spuckt mir nur das hier aus:
"C:\Program Files\Java\jdk-9.0.1\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2.5\lib\idea_rt.jar=53684:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2.5\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Name\IdeaProjects\1BlattSEP\out\production\1BlattSEP Main
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Main.main(Main.java:23)
Process finished with exit code 1
Ich habe jetzt noch nicht mal versucht so etwas wie ein Koordinatensystem zu erstellen, und ich bin totaler Anfänger habe also auch noch nie so eine ähnliche Aufgabe gelöst, vorher noch nicht mal mit Arrays in Java gearbeitet... Wäre toll wenn mir irgendjemand helfen kann.
ich muss folgende Aufgabe lösen:
Implementieren Sie ein Programm zum Darstellen eines Histogramms. Die Daten sollen als Array von double-Werten gegeben sein, z.B.:
double[] data1 = {
1.1, 1.9, 2.2, 3.0, 5.1, 5.2, 4.3, 0.1, 4.5, 5.1
};
double[] data2 = {
8.0, 6.0, 4.0, 1.0, 2.0, 3.0, 4.0, 9.0
};
Sie brauchen sich nicht um die Eingabe der Daten zu kümmern. Das Array der Daten soll beliebig sein, kann aber als Variable fest im Programm deklariert sein. Die Daten sollen als einfaches Balkendiagramm in ASCII dargestellt werden. Dazu benötigen Sie lediglich die Funktion System.out.println. Sind die Daten zum Beispiel wie oben gegeben, dann könnte die Ausgabe zum Beispiel so aussehen:
6| X
5| XX X
4| XXX XX
3| XXXX XX
2| XXXXXX XX
1| XXXXXXXXX
+ --3--6--9--
Hinweis:
Beachten Sie, dass die Länge des Eingabe-Arrays unterschiedlich groß sein kann;
und dass im Array beliebig große Wert enthalten sein können.
Und das habe ich bisher:
Java:
public class Main {
public static void main(String[] args){
double[] balkenlange = {4.0,2.0,3.0,4.0,5.0,1.0,2.0,3.0,4.0,5.0}; //beliebiges Array zur //Angabe der Längen der Balken (ein Wert entspricht einer Balkenlänge)
String wert="X"; //ein Wert in einem Balken
String reihe=""; //eine Zeile/Reihe im Histogramm
int balkenanzahl=balkenlange.length; //Anzahl der Balken
int i=0; //Deklarieren von i im Vorhinein
int maxbalken= (int) Double.MAX_VALUE; //Maximale Balkenhöhe
double counter=maxbalken; //ein Counter der nach jeder Reihe des Histogramms //dekrementieren soll, beginnend be der ersten Reihe im Histogramm
for (int k=0; k<balkenanzahl; k++){ //für jede Stelle des Arrays gilt...
if (balkenlange[k]>maxbalken) { //wenn ein Wert im Array größer ist, als die //maximale Balkenlänge,
maxbalken= (int) balkenlange[k]; //dann wird dieser Wert zur maximalen //Balkenlänge
}
}
for (int j=0; j<=maxbalken; j++) { //für jede Reihe im Histogramm gilt:
for (i = 0; i <= balkenanzahl; i++) { //für jeden Wert einer Reihe im Histogramm //gilt:
if (counter>=balkenlange[i]) { //wenn der counter >=eines Werts im Array,
wert = "X"; //so erhält er die Ausgabe X
} else if (counter<balkenlange[i]) { //ist der Wert kleiner,
wert = " "; //so bleibt die Stelle in der Ausgabe frei
}
reihe=reihe+wert; //ein Wert wird der Reihe hinzugefügt
System.out.print(reihe); //die Reihe wird ausgegeben
}
counter--; //der Counter wird dekrementiert
System.out.print("\n"); //ein Absatz, die nächste Reihe ist dran
}
}
}
Das Problem ist, dass ich denke, dass mein Code funktionieren müsste, aber die Console spuckt mir nur das hier aus:
"C:\Program Files\Java\jdk-9.0.1\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2.5\lib\idea_rt.jar=53684:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2.5\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Name\IdeaProjects\1BlattSEP\out\production\1BlattSEP Main
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Main.main(Main.java:23)
Process finished with exit code 1
Ich habe jetzt noch nicht mal versucht so etwas wie ein Koordinatensystem zu erstellen, und ich bin totaler Anfänger habe also auch noch nie so eine ähnliche Aufgabe gelöst, vorher noch nicht mal mit Arrays in Java gearbeitet... Wäre toll wenn mir irgendjemand helfen kann.