publicclassStatistics{staticint data[]=newint[5];staticint cnt;staticdouble sum;staticdouble mean;staticdouble variance;publicstaticdouble sum (int[] arr){for(int i =0; i <arr.length; i++){
sum += arr[i];
cnt++;}return sum;}publicstaticdouble mean (int[] arr){return sum/cnt;}publicstaticdouble variance (int[] arr){for(int i =0; i < arr.length; i++){
variance +=Math.pow(data[i]- mean,2);}returnMath.sqrt(variance/cnt);}publicstaticvoidshiftArray(int[] arr){int[] newArr =newint[arr.length];for(int i =1; i<newArr.length; i++){
newArr[i]=arr[i-1];}
data = newArr;}staticvoidcomputeStatistics(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);}publicstaticvoidmain(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.
Asoooo das habe ich irgendwie nicht gesehen,dummer fehler,sorry.Jetzt bekomme ich eine ausgabe,aber sie ist falsch
Java:
publicclassStatistics{staticint data[]=newint[5];staticint cnt;staticdouble sum;staticdouble mean;staticdouble variance;publicstaticdouble sum (int[] arr){for(int i =0; i <arr.length; i++){
sum += arr[i];
cnt++;}return sum;}publicstaticdouble mean (int[] arr){returnsum(arr)/cnt;}publicstaticdouble 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);}returnMath.sqrt(variance/cnt);}publicstaticvoidshiftArray(int[] arr){int[] newArr =newint[arr.length];for(int i =1; i<newArr.length; i++){
newArr[i]=arr[i-1];}
data = newArr;}staticvoidcomputeStatistics(int value){shiftArray(data);
data[0]= value;Out.println("Value"+" "+ value);Out.println("Mean"+" "+mean(data));Out.println("Deviation"+" "+variance(data));}publicstaticvoidmain(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?
Also jetzt ne antwort zu meiner Frage man muss eine uberprufung in der methode sum und deviation.
Java:
publicclassStatistics{staticint data[]=newint[5];staticint cnt;publicstaticdouble 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;}publicstaticdouble mean (int[] array){double mean =0.0;
mean =sum(array)/cnt;return mean;}publicstaticdouble 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);}}returnMath.sqrt(deviation/cnt);}publicstaticvoidmoveArray(int[] array){int[] newArray =newint[array.length];for(int i =1; i<newArray.length; i++){
newArray[i]=array[i-1];}
data = newArray;}staticvoidcomputeStatistics(int value){moveArray(data);
data[0]= value;Out.println("Value"+" "+ value);Out.println("Mean"+" "+mean(data));Out.println("Deviation"+" "+deviation(data));}publicstaticvoidmain(String[] args){while(In.done()){Out.print("Please input a value:");int value =In.readInt();Out.println();computeStatistics(value);Out.println();}}}
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.