2012-01-12 11 views
1

2次元配列を持つため、行ごとに平均と標準偏差を計算し、適切な場所に格納する必要があります。私はコードを書いていますが、依然として私に間違った結果を与え、意図した値の正解を与えていません。誰かが私を助けることができる、おそらく私のコードは間違っているが、私はそれを修正する方法を知らない。ここでは、アレイ配列2次元の行ごとに平均と標準偏差を計算する

enter image description here

ですそしてここでコードそのものです:

public void analyze(String[][] arr) { 
    double res = 0.0; 
    double avg = 0; 
    double variance = 0; 
    double SD; 
    double Q = 0; 
    int index = 0; 

    for (int i = 1; i < (arr.length); i++) { 
     for (int j = 1; j < (arr[i].length); j++) { 
     res = res + Integer.parseInt(arr[i][j]); 
     } 

     avg = res/(arr[i].length - 1); 

     System.out.print("arr[i].length: " + arr[i].length + "\t"); 
     System.out.println("Average is " + avg); 
     /* 
     double v = Q + (arr.length - avg) * (arr.length - avg); 
     variance = Q/(arr.length - 1); 
     SD = Math.sqrt(variance); 
     System.out.println("average is " + avg); 
     System.out.println("SD"); 

     double nums[] = { 1.0, 2.3, 3.4, 4.5, 40.5 }; 
     double result = 0.0; 
     for (i = 0; i < nums.length; i++) { 
     result = result + nums[i]; 
     } 
     System.out.println("Average is =" + result/nums.length); 
     */ 
    } 
} 

答えて

1

あなたは1上ごforループの両方を起動します。配列は、Javaではインデックスが付けられていません。これにより、最初の行が完全になくなり、次の各行の最初の列が欠落します。

変更

for(int i=1; i<(arr.length);i++){ 
     for(int j=1;j<(arr[i].length);j++){ 
     res = res+Integer.parseInt(arr[i][j]); 
    } 

for(int i=0; i<(arr.length);i++){ 
     for(int j=0;j<(arr[i].length);j++){ 
     res = res+Integer.parseInt(arr[i][j]); 
    } 
+0

実際には、最初の列と最初の行を数えないので、ループは1で始まります。なぜなら、整数ではなく文字列値なのでです。上記のコードでは、結果は配列の最初の行でのみ正しいので、残りは正しくありません。助けを見て、ありがとう – fobiacristy

+0

O.K. - あなたが問題をよりよく説明したので、@Perceptionが少なくとも1つのバグを発見したことは明らかです.resを0.0にリセットする必要があります。また、 "未来を見て"、Double.parseDouble()を使用することをお勧めします。現在の問題には害はなく、将来はダブルスを扱うことができます。 – user949300

+0

仲間、助けてくれてありがとう、私は正常に出力を正確に数えています:) – fobiacristy

1

にあなたはQための計算を逃します。そして、外側のループの各繰り返しの間で計算変数をリセットする必要があります。