如何从同一个类打印/如何在另一个方法中单独打印不同的元素

时间:2016-02-17 03:29:11

标签: java

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
}
}
}

我试图打印出每个方法并以不同的方法打印fiveNumberSummary的每个元素。我知道有更好的语法,但最大的问题是以不同的方法打印元素更改。最好的方法是什么?

1 个答案:

答案 0 :(得分: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