2016-02-17 1 views
-1
public class Lab5_2 implements SingleVariableStats{ 
static final double undefinedStatsValue = -9999999; 
public double mean(double[] dataSet){ 
    double l=0; 
    double x=0; 
    if(dataSet.length>1){ 
    for(int i=0;i<dataSet.length-1;i++){ 
    l+=dataSet[i]; 
    } 
    l=l/dataSet.length; 
    }else{ 
    l=undefinedStatsValue; 
    } 
return l; 
} 
public double median(double[] dataSet){ 
    double l=0; 
    if(dataSet.length>1){ 
    if(dataSet.length%2==1){ 
     double x=dataSet[dataSet.length/2]; 
     double y=dataSet[dataSet.length/2+1]; 
     l=(x+y)/2; 
    }else{ 
     int b=(int)dataSet[dataSet.length/2]; 
     l=(double)b; 
    } 
    }else{ 
    l=undefinedStatsValue; 
    } 
    return l; 
} 
public double stdev(double[] dataSet){ 
    double l=0; 
    double u=0; 
    if(dataSet.length>1){ 
    for(int i=0;i<dataSet.length-1;i++){ 
    l+=dataSet[i]; 
    } 
    l=l/dataSet.length; 
    for(int i=0;i<dataSet.length-1;i++){ 
    u+=(Math.pow(dataSet[i]-l,2)); 
    } 
    l=Math.sqrt(u); 
    }else{ 
    l=undefinedStatsValue; 
    } 
return l; 
} 
public double[] fiveNumberSummary(double[] dataSet){ 
    double[] l = new double[5]; 
    double y=0; 
    double n=9; 
    if(dataSet.length>1){ 
    for(int i=0;i<dataSet.length-1;i++){ 
     if(l[i]>=y){ 
     y=l[i]; 
     l[0]=y; 
     } 
     if(l[i]<=n){ 
     n=l[i]; 
     l[4]=n; 
     } 
     if(dataSet.length%2==1){ 
     l[1]=dataSet[dataSet.length/2/2]; 
     }else{ 
     int b=(int)dataSet[dataSet.length/2/2]; 
     l[1]=(double)b; 
     } 
     if(dataSet.length%2==1){ 
     l[2]=dataSet[dataSet.length/2]; 
     }else{ 
     int b=(int)dataSet[dataSet.length/2*1.5]; 
     l[2]=(double)b; 
     } 
     if(dataSet.length%2==1){ 
     l[3]=dataSet[dataSet.length/1.5]; 
     }else{ 
     int b=(int)dataSet[dataSet.length/2*1.5]; 
     l[3]=(double)b; 
     } 
     if(l[3]>=l[1]){ 
     x=l[3]-l[1]; 
     }else{ 
     x=l[1]-l[3]; 
     } 
    } 
    }else{ 
     l=undefinedStatsValue; 
    } 
    return l; 
    } 
public double iqr(double[] dataSet){ 
    double l=0; 
    if(dataSet.length>1){ 
    l=x; 
    }else{ 
    l=undefinedStatsValue; 
    } 
    return l; 
} 
public void printAnalysis(double[] dataSet){ 
    if(dataSet.length>1){ 
    System.out.println("n= "+dataSet.toString(dataSet.length)); 
    System.out.println("mean= "+mean.toString(dataSet)); 
    System.out.println("median= "+median.toString(dataSet)); 
    System.out.println("stdev= "+stdev.toString(dataSet)); 
    System.out.println("min= "+fiveNumberSummary.toString(dataSet) 
    //(some way to get a number from post-array) 
    System.out.println("Q1= "+fiveNumberSummary.toString(dataSet)); 
    System.out.println("med= "+fiveNumberSummary.toString(dataSet)); 
    System.out.println("Q2= "+fiveNumberSummary.toString(dataSet)); 
    System.out.println("max= "+fiveNumberSummary.toString(dataSet)); 
    System.out.println("iqr= "+iqr.toString(dataSet)); 
    }else{ 
//format that changes undefinedStatesValue output 
} 
} 
} 

Я пытаюсь распечатать каждый метод и распечатать каждый элемент из 5NumberSummary другим способом. Я знаю, что есть лучший синтаксис, но самая большая проблема заключается в изменении элементов печати в другом методе. Каков наилучший способ сделать это?Как печатать из того же класса/как печатать разные элементы отдельно другим способом

ответ

0

В вашем методе fiveNumberSummary(...) вы сами изменяете dataSet.

Обратите внимание, что он обращается к значениям по ссылке (-ам), и, следовательно, вы заканчиваете изменение массива dataSet, который вы изначально передали.

Вы должны скопировать массив dataSet в другой массив, если вы не намерены изменять какие-либо значения в массиве фактического/переданного.

Вот как вы можете это сделать:

/* It is a good programming practice to make the formal parameters `final` */ 
public double[] fiveNumberSummary(final double[] dataSet) { 
    double[] newDataSet = new double[dataSet.length]; 
    /* Copy Array */ 
    System.arraycopy(dataSet, 0, newDataSet, 0, dataSet.length); 
    ... 
    /* Use newDataSet instead of dataSet */ 
    ... 
    ... 
} 

выше создаст новый массив с теми же значениями, что и фактического массива, но новые ссылки и, следовательно, изменяя этот новый массив не будет влиять на фактический/прошло dataSet.

+0

Спасибо за исправление, но теперь как я могу вызвать один элемент из метода fiveNumberSummary в операторы печати для 5NumberSummary в методе printAnalysis? – alztrek

Смежные вопросы