2017-06-11 19 views
0

私は、javaのarraylistsを使用して分散を計算する必要がある練習をしています。arraylistsでサンプルの分散を計算するJava

整数型ではなく、倍精度型のarraylistの計算方法が分かれていると思っていましたが、そうではありませんでした。 NetBeansで

import java.util.ArrayList; 

public class Variance { 
    // Copy here sum from exercise 63 
    public static double sum(ArrayList<Integer> list) { 
     int i = 0; 
     int sum = 0; 

     while (i < list.size()) { 
      sum += list.get(i); 
      i++; 
     } 

     return sum; 
    } 

    public static double sumdouble(ArrayList<Double> list) { 
     int i = 0; 
     double sum = 0; 

     while (i < list.size()) { 
      sum += list.get(i); 
      i++; 
     } 

     return sum; 
    } 

    // Copy here average from exercise 64 
     public static double average(ArrayList<Integer> list) { 
     double sum = sum(list); 
     double average = sum/list.size(); 
     return average; 
    } 

     public static double averagedouble(ArrayList<Double> lists) { 
     double sum = sumdouble(lists); 
     double average = sum/lists.size(); 
     return average; 
    } 

    public static double variance(ArrayList<Integer> list) { 


     double mean = average(list); 
     int i = list.size() - 1; 
     ArrayList<Double> varianceList = new ArrayList<Double>(); 


     while (i >= 0) { 
      //gets value 

      double value = list.get(i); 
      value = value - mean; 
      value = value * value; 
      varianceList.add(value); 


     } 

     double final = averagedouble(varianceList); 

     return final; 
    } 

    public static void main(String[] args) { 
     ArrayList<Integer> list = new ArrayList<Integer>(); 
     list.add(3); 
     list.add(2); 
     list.add(7); 
     list.add(2); 

     System.out.println("The variance is: " + variance(list)); 
    } 

} 

エラー:互換性のない型:ArrayListのは することはできません任意の助け

感謝をdoubleに変換。

+0

あなたのwhileループが終了したことがない、A:またはちょうどメソッドの値を返します'final'はJavaのキーワードなので、' double final = averagedouble(varianceList); 'はコンパイルされません。 –

答えて

0

問題はすべて分散方式です。 ループ内で減分する必要があります--i; 戻り値の名前を別の名前に変更するか、値を直接返す必要があります。あなたの方法ではなく、次のようになります。

public static double variance(ArrayList<Integer> list) { 

    double mean = average(list); 
    int i = list.size() - 1; 
    ArrayList<Double> varianceList = new ArrayList<Double>(); 


    while (i >= 0) { 
     //gets value 

     double value = list.get(i); 
     value = value - mean; 
     value = value * value; 
     varianceList.add(value); 
     --i; 

    } 

    return averagedouble(varianceList); 
} 

また、私は、彼らが配列全体をループに適しているので、ループのためにループするあなたの中のほとんどを切り替える検討します。

0

コード内に--i;がありません。ループをデクリメントしませんでした。

使用このコードは、それが最適化とクリーンさ:

import java.util.ArrayList; 
public class Variance 
{ 
    ArrayList<Integer> listOfIntegers; 
    int size; 
    public Variance(ArrayList<Integer> listOfIntegers) 
    { 
     this.listOfIntegers = listOfIntegers; 
     size = listOfIntegers.size(); 
    } 

    double getMean() 
    { 
     double sum = 0.0; 
     for(double a : listOfIntegers) 
      sum += a; 
     return sum/size; 
    } 

    double getVariance() 
    { 
     double mean = getMean(); 
     double square = 0; 
     for(double a :listOfIntegers) 
      square += (a-mean)*(a-mean); 
     return square/size; 
    } 
} 
0

あなたの方法の間違いを宣言するデータ型があります。

public static double sum(ArrayList<Integer> list) 

が、これはint変数sumと要素と互換性を持つようにintを返す必要がありますArrayListのデータ型:

public static int sum(ArrayList<Integer> list) 
この方法でも

public static double average(ArrayList<Integer> list) { 
     //double sum = sum(list); 
     int sum = sum(list); 
     double average = sum/list.size(); 
     return average; 
} 

あなたはsum()メソッドの戻り値の型と互換性があるようにintとしてsumを宣言する必要があります。

別の問題varianceの方法でループは、あなたがそれを修正する必要が無限である間:

while (i >= 0) { 
    //gets value 
double value = list.get(i); 
     value = value - mean; 
     value = value * value; 
     varianceList.add(value); 
     i--; // decrease i index 
} 

とreturn文の変数で代わりに名前を変更できるJava final

に予約されたキーワードではありません

return averagedouble(varianceList);

関連する問題