Standardabweichung in Java berechnen

arhzz

Bekanntes Mitglied
Hallo zusammen!

Ich muss ein Code erstellen der die letzten fünf werte nimmt und daraus den Mittelwert und Standardabweichung berechnet.Ich habe das so gemacht

Java:
public class Statistics {
    static int data[] = new int[5];
    static int cnt;
    static double sum;
    static double mean;
    static double variance;
    
    public static double sum (int[] arr) {
        for(int i = 0; i <arr.length; i++) {
            sum += arr[i];
            cnt++;
        }
        return sum;
    }
    
    public static double mean (int[] arr) {
        return sum/cnt;
    }
    
    public static double variance (int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            variance += Math.pow(data[i] - mean,2);
        }
        return Math.sqrt(variance/cnt);
    }
    
     public static void shiftArray(int[] arr){
        int[] newArr = new int[arr.length];
       
        for(int i = 1; i<newArr.length; i++){
            newArr[i]=arr[i-1];
        }
        
        data = newArr;
    }
    
    static void computeStatistics(int value) {
        shiftArray(data);
        data[0] = value;
        Out.println("Value" + " " + value);
        Out.println("Mean" + " "+ mean);
        Out.println("Deviation"+ " " + variance);
        
    }
    
    public static void main(String[] args) {
        computeStatistics(1);
        computeStatistics(2);
        computeStatistics(3);
        computeStatistics(4);
        computeStatistics(5);
    }
    
}

Allerdings is die ausgabe an der konsole nur 0 bei Mean und Deviation.Ich kann den Fehler nicht finden,ein bisschen Hilfe wäre Super!

Danke im Voraus.
 
Java:
public class Statistics {
    static int data[] = new int[5];
    static int cnt;
    static double sum;
    static double mean;
    static double variance;
   
    public static double sum (int[] arr) {
        for(int i = 0; i <arr.length; i++) {
            sum += arr[i];
            cnt++;
        }
        return sum;
    }
   
    public static double mean (int[] arr) {
        return sum/cnt;
    }
   
    public static double variance (int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            variance += Math.pow(data[i] - mean,2);
        }
        return Math.sqrt(variance/cnt);
    }
   
     public static void shiftArray(int[] arr){
        int[] newArr = new int[arr.length];
      
        for(int i = 1; i<newArr.length; i++){
            newArr[i]=arr[i-1];
        }
       
        data = newArr;
    }
   
    static void computeStatistics(int value) {
        shiftArray(data);
        data[0] = value;
        Out.println("Value" + " " + value);
        Out.println("Mean" + " "+ mean);
        Out.println("Deviation"+ " " + variance);
        Out.println("Sum" + sum);
        Out.println("Count" + cnt);
       
       
    }
   
    public static void main(String[] args) {
        computeStatistics(1);
        computeStatistics(2);
        computeStatistics(3);
        computeStatistics(4);
        computeStatistics(5);
    }
   
}

Also es gibt nur 0.0 bei sum und 0 bei count.Das habe ich vermutet aber ich verstehe nicht warum? Siehen die methoden die variablen nicht? Was wird dann zuruckgegeben bei den methoden.
 
Zuletzt bearbeitet:
Asoooo das habe ich irgendwie nicht gesehen,dummer fehler,sorry.Jetzt bekomme ich eine ausgabe,aber sie ist falsch

Java:
public class Statistics {
    static int data[] = new int[5];
    static int cnt;
    static double sum;
    static double mean;
    static double variance;
    
    public static double sum (int[] arr) {
        for(int i = 0; i <arr.length; i++) {
            sum += arr[i];
            cnt++;
        }
        return sum;
    }
   
    public static double mean (int[] arr) {
        return sum(arr)/cnt;
    }
   
    public static double variance (int[] arr) {
        double mean = mean(arr);
        double sum = sum(arr);
        for(int i = 0; i < arr.length; i++) {
            variance += Math.pow(data[i] - mean,2);
        }
        return Math.sqrt(variance/cnt);
    }
   
     public static void shiftArray(int[] arr){
        int[] newArr = new int[arr.length];
      
        for(int i = 1; i<newArr.length; i++){
            newArr[i]=arr[i-1];
        }
       
        data = newArr;
    }
   
    static void computeStatistics(int value) {
        shiftArray(data);
        data[0] = value;
        Out.println("Value" + " " + value);
        Out.println("Mean" + " "+ mean(data));
        Out.println("Deviation"+ " " + variance(data));
   
       
    }
   
    public static void main(String[] args) {
        computeStatistics(1);
        computeStatistics(2);
        computeStatistics(3);
        computeStatistics(4);
        computeStatistics(5);
    }
   
}

So sieht die ausgabe Aus.

Value 1
Mean 0.2
Deviation 0.23094010767585035
Value 2
Mean 0.3
Deviation 0.37806525010020875
Value 3
Mean 0.5142857142857142
Deviation 0.5351635264103861
Value 4
Mean 0.8
Deviation 0.6932822083291009
Value 5
Mean 1.1538461538461537
Deviation 0.8448454752135517

Also der Mittelwert bei 1 sollte 1 sein und nicht 0,2.Ich verstehe nicht warum das so ist,die formel fur den mittelwert sollte passen oder?
 
Ok I hab jetzt gesehen das sum und cnt falsch berechnet sind.Ich hab das mit sum erledigt aber cnt ist immer noch falsch bei mir

Java:
public class Statistics {
    static int data[] = new int[5];
    static int cnt;
    
    public static double sum (int[] arr) {
        double sum = 0.0;
        cnt = 0;
        for(int i = 0; i <arr.length; i++) {
            sum += arr[i];
            cnt++;
        }
        return sum;
    }
   
    public static double mean (int[] arr) {
        return sum(arr)/cnt;
    }
   
    public static double variance (int[] arr) {
        double mean = mean(arr);
        double sum = sum(arr);
        double variance = 0.0;
        for(int i = 0; i < arr.length; i++) {
            variance += Math.pow(data[i] - mean,2);
        }
        return Math.sqrt(variance/cnt);
    }
   
     public static void shiftArray(int[] arr){
        int[] newArr = new int[arr.length];
      
        for(int i = 1; i<newArr.length; i++){
            newArr[i]=arr[i-1];
        }
       
        data = newArr;
    }
   
    static void computeStatistics(int value) {
        shiftArray(data);
        data[0] = value;
        Out.println("Value" + " " + value);
        Out.println("Count" +" "+ cnt);
        Out.println("Mean" +" " + mean(data));
        Out.println("Deviation"+ " "+variance(data));
   
       
    }
   
    public static void main(String[] args) {
        computeStatistics(1);
        computeStatistics(2);
        computeStatistics(3);
        computeStatistics(4);
        computeStatistics(5);
    }
   
}

count ist zuerst 0, dann 5 und es bleibt 5 immer.Ich verstehe nicht wie es von 0 auf 5 steigen kann, da cnt++ count = count + 1; bedeutet.
 
Ok I hab jetzt gesehen das sum und cnt falsch berechnet sind.Ich hab das mit sum erledigt aber cnt ist immer noch falsch bei mir

Java:
public class Statistics {
    static int data[] = new int[5];
    static int cnt;
   
    public static double sum (int[] arr) {
        double sum = 0.0;
        cnt = 0;
        for(int i = 0; i <arr.length; i++) {
            sum += arr[i];
            cnt++;
        }
        return sum;
    }
  
    public static double mean (int[] arr) {
        return sum(arr)/cnt;
    }
  
    public static double variance (int[] arr) {
        double mean = mean(arr);
        double sum = sum(arr);
        double variance = 0.0;
        for(int i = 0; i < arr.length; i++) {
            variance += Math.pow(data[i] - mean,2);
        }
        return Math.sqrt(variance/cnt);
    }
  
     public static void shiftArray(int[] arr){
        int[] newArr = new int[arr.length];
     
        for(int i = 1; i<newArr.length; i++){
            newArr[i]=arr[i-1];
        }
      
        data = newArr;
    }
  
    static void computeStatistics(int value) {
        shiftArray(data);
        data[0] = value;
        Out.println("Value" + " " + value);
        Out.println("Count" +" "+ cnt);
        Out.println("Mean" +" " + mean(data));
        Out.println("Deviation"+ " "+variance(data));
  
      
    }
  
    public static void main(String[] args) {
        computeStatistics(1);
        computeStatistics(2);
        computeStatistics(3);
        computeStatistics(4);
        computeStatistics(5);
    }
  
}

count ist zuerst 0, dann 5 und es bleibt 5 immer.Ich verstehe nicht wie es von 0 auf 5 steigen kann, da cnt++ count = count + 1; bedeutet.
Also jetzt ne antwort zu meiner Frage man muss eine uberprufung in der methode sum und deviation.


Java:
public class Statistics {
    static int data[] = new int[5];
    static int cnt;
    
    public static double sum (int[] array) {
        double sum = 0.0;
        cnt = 0;
        for(int i = 0; i <array.length; i++) {
            if(array[i] != 0) {
            sum += array[i];
            cnt++;
            }
        }
        return sum;
    }
   
    public static double mean (int[] array) {
        double mean = 0.0;
        mean = sum(array)/cnt;
        return mean;
    }
   
    public static double deviation (int[] array) {
        double mean = mean(array);
        double sum = sum(array);
        double deviation = 0.0;
        for(int i = 0; i < array.length; i++) {
            if(data[i] !=0) {
            deviation += Math.pow(data[i] - mean,2);
            }
        }
        return Math.sqrt(deviation/cnt);
    }
   
     public static void moveArray(int[] array){
        int[] newArray = new int[array.length];
      
        for(int i = 1; i<newArray.length; i++){
            newArray[i]=array[i-1];
        }
       
        data = newArray;
    }
   
    static void computeStatistics(int value) {
        moveArray(data);
        data[0] = value;
        Out.println("Value" + " " + value);
        Out.println("Mean" +" " + mean(data));
        Out.println("Deviation"+ " "+ deviation(data));
   
       
    }
   
    public static void main(String[] args) {
        while(In.done()) {
        Out.print("Please input a value:");
        int value = In.readInt();
        Out.println();
        computeStatistics(value);
        Out.println();
    }
    }
        
    }
 
Teste mal mit:
Java:
computeStatistics(2);
computeStatistics(0);
computeStatistics(2);
computeStatistics(0);
computeStatistics(2);
 
Du solltest dir genau überlegen, was wann passiert.
Du hast diverse "static"-Variablen (die am Anfang mit 0 initialisiert sind).
Du hast genauso bezeichnete "static"-Methoden (die diese Variablen lesen und schreiben).
Diese Methoden haben Rückgabewerte, die nie benutzt werden.

Da ist leider ganz viel schief ...
 
Warum count von 0 auf 5 wechselt ... Du lässt es ja erst ganz am Schluss ausgeben und nicht innerhalb der Schleife, wo es verändert wird.
 

Zurück
Oben