int array als double array ausgeben

JavaPatrick

Mitglied
Hallo.
ich versuche ein Programm zu schreiben dem ein Array mit ganzen Zahlen übergeben wird und daraus ein neues Array mit double-Werten erzeugen soll. Außderm soll jedes Feld den Durchschnitt der letzten drei Werte enthalten- das aktuelle Element inbegriffen.
bisher sieht es bei mir so aus:
private static double[] duchschnitt(int[] values) {
double[] detailed;
for (int e = 0; e <= values.length; e++) {
detailed[e] = (values[e] + values[e - 1] + values[e - 2]);
}
return detailed;
}
Leider kommt bei den beiden letzten detailed Feldern die Meldung, dass Java will dass die Variable detailed initialisiert wird. Dabei soll das Programm ja unabhängig davon funktionieren..
Vielen Dank schon mal im Vorraus für jede Hilfe, bin leider ein echter Anfänger..
 
Vielen herzlichen Dank soweit für die Antworten. ich habe jetzt als Größe 4 festgelegt. Leider kommt jetzt eine ArrayIndexOutOfBoundsException bei folgendem Array: { 2, 3, 4, 8}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at ConstFunction.rollingAvg(ConstFunction.java:10)
at ConstFunction.main(ConstFunction.java:18)

Mein Programm sieht aktuell so aus:

private static double[] durchschnitt(int[] values) {
int MAX_NUMBER = 3;
values = new int[MAX_NUMBER];
double[] detailed = new double[MAX_NUMBER];
for (int e = 0; e <= values.length; e++) {
if (e > 2) {
detailed[e] = ((values[e] + values[e - 1] + values[e - 2]) / 3);
}
}
return detailed;
}

public static void main(String[] args) {
int[] feld = { 2, 3, 4, 8 };
double[] schnitt = durchschnitt(feld);
for (double d = 0; d <= feld.length; d++) {
System.out.println(d + " ");
}

}
 
Bitte poste Deinen Code in Code-Tags, also [code=Java]Dein Code[/code] - dann kann man das besser lesen.

Ansonsten: Du zählst von 0 bis einschließlich der Länge Deines Arrays. Das ist 1 Element zu viel.
 
Nachtrag: der ganze Code gibt kaum Sinn, Du verwendest das übergebene Array überhaupt nicht, sondern legst ein neues an. Mach das besser so:
Java:
private static double[] durchschnitt(int[] values) {
    double[] detailed = new double[values.length];
 
Das Problem ist, dass die Elemente in einem Array immer bei 0 anfangen.
Das heißt, dass wenn ich jetzt sowas schreibe:
Java:
int[] myArray = new int[] {1,2,3};
und dann das erste Element aus dem Array abrufen will muss ich
Java:
myArray[0]
schreiben.
Wenn ich also jetzt mein Array der Länge 3 erzeugt habe und mit einer for Schleife das Array durchlaufen will, darf ich NICHT
Java:
for(int i = 0; i <= myArray.lenght;i++)
    //Do smth
schreiben, da ich dann versuche auf das Element mit dem Index 3 zuzugreifen, was demnach das vierte element ist, das aber nicht existiert.
Außerdem ist es unnötig die Größe von einem übergebenen Array nochmal zu variieren.
Du solltest lieber das schreiben:
Java:
private static double[] durchschnitt(int[] values) {
double[] detailed = new double[values.lenght];
Außerdem gibt deine For-Schleife auch nur den double aus, den du immer um 1 erhöst.
Wenn du (was ich denke) den double aus dem wert Array ausgeben willst, musst du entweder eine ForEach schleife benutzen oder das hier:
Java:
for(int d = 0; d < schnitt.lenght; d++)
    System.out.println(schnitt[d]);
 

Zurück
Oben