2016-04-03 5 views
-1

Ich muss Klassen erstellen, die mit der Hauptklasse implementiert werden, die jemand anderes hat, und aus irgendeinem Grund bekomme ich nicht die richtigen Ausgaben, ich bin mir nicht sicher, ob meine Berechnungen weg sind von denen ich nicht denke, dass sie oder meine einfügen sind Klasse ist falsch.Warum erscheint mein Code mit der falschen Ausgabe? Ist meine Einfügeklasse falsch?

Erwartete Ausgabe:

Median = 44,5

Mittel = 49,300

SD = 30,581

tatsächliche Ausgang:

Median = 0,0

Mittel = 0,967

SD

= 4,712

public class StatPackage { 
int count; 
double [] scores; 
final int MAX = 500; 


StatPackage() { 
count = 0; 
scores = new double[MAX]; 
} 
public void insert (double value) { 
if (count < MAX){ 
scores[count] = value; 
++ count; 
} 
} 
public double Mean() { 
    double sum = 0; 
    //For loop for calculating average or mean 
    for(int i = 0; i < scores.length; i++){ 
      sum += (scores[i]); 
      count++;  
    } 
    double average = sum/count; 
    return average; 
    } 

public double Median() { 
int min; 
int tmp; 
int size; 

for (int i = 0; i < scores.length - 1; i ++) 
{ 
min = i; 
for (int pos = i + 1; pos < scores.length; pos ++) 
if (scores [pos] < scores [min]) 
min = pos; 

tmp = (int)scores [min]; 
scores [min] = scores [i]; 
scores [i] = tmp; 

} 
double median = 0; 
if (scores.length % 2 == 0){ 
    median = (scores[scores.length/2-1] + scores[scores.length/2])/2; 
} 
else { 
    median = (scores[((scores.length/2))]); 
} 
return median; 
} 

public double Variance() { 
    double variance = 0; 
    double sum = 0; 
    //For loop for getting the variance 
    for(int i = 0; i < scores.length; i++){ 
     sum += scores[i]; 
     variance += scores[i] * scores[i]; 
     count++; 
    } 
    double varianceFinal = ((variance/count)-(sum*sum)/(count*count)); 
    return (varianceFinal); 
} 

public double StdDev (double variance) { 
    double sum = 0; 
    for(int i = 0; i < scores.length; i++){ 
     sum += scores[i]; 
     variance += scores[i] * scores[i]; 
     count++; 
    } 
    double varianceFinal = ((variance/count)-(sum*sum)/(count*count)); 
return Math.sqrt(varianceFinal); 

} 

} 
+2

Versuchen Sie es unter einem Debugger ausgeführt wird. – JJF

Antwort

0

Die Länge der Noten-Array 500, so dass jedes Mal, wenn Sie es in einer Berechnung verwenden Sie ausgeführt, dass 500-mal. Sie müssen Ihre Schleifenfortsetzungsbedingungen von der Anzahl der Werte im Array abhängig machen, nicht von der tatsächlichen Länge des Arrays. Ich würde auch auf Ihre variable Namensgebung achten, Sie verwenden manchmal an zwei Stellen zählen und es hat globalen Geltungsbereich! Diese Methode speichert die Anzahl der Werte im Array in der Zählvariable:

public void insert (double value) { 
    if (count < MAX){ 
     scores[count] = value; 
     ++count; 
    } 
} 

So die Zählvariable als Bedingung Schleifenfortsetzungs verwenden, wenn Sie Werte aus dem Array erhalten, etwa so:

public double mean() { 

     double sum = 0; 

     //For loop for calculating average or mean 
     for(int i = 0; i < count; i++){ 
      sum += (scores[i]); 
     } 

     double average = sum/count; 
     return average; 
    } 

Das sollte ein wenig helfen, ich habe keine Zeit, um Ihre anderen Methoden zu überprüfen, aber vielleicht wird dies Ihnen einen guten Startplatz geben. Ich habe herausgefunden, was passiert, indem ich print-Anweisungen in deine Methoden einfüge, um sicherzustellen, dass die Werte wie erwartet sind. Es ist eine hilfreiche Sache beim Debuggen. Ihr Mittelwert() -Methode mit den Druckanweisungen wie folgt aussieht:

public double mean() { 

    double sum = 0; 

    //For loop for calculating average or mean 
    for(int i = 0; i < count; i++){ 
     sum += (scores[i]);  
    } 

    // print statements for debugging 
    System.out.println("count is " + count); 
    System.out.println("sum is " + sum); 

    double average = sum/count; 
    return average; 
} 
0

Da die Lösung leicht durch das Debuggen gefunden wird, werde ich Ihnen nur einen Tipp geben:

Die mean von 3, 4 und 5 ist 4: (3+4+5)/3, nicht (3+4+5)/(n*3) wobei n eine positive ganze Zahl ist.

Wenn Sie Ihren Mittelwert und Standard betrachten und ihn durch das erwartete Ergebnis dividieren, sehen Sie, dass es sich um eine gerundete Zahl handelt.

Sobald Sie die Lösung auf 1 Problem zu finden, werden Sie sofort wissen, warum die anderen Ergebnisse fehlerhaft sind auch =)

Verwandte Themen