前提・実現したいこと
コマンドライン引数から成績を処理するコードをつくっているのですが、標準偏差がうまく求められません。本来ならsd = 18.85となるはずなのですが…
解決方法を教えてください。お願いします。
ちなみにコマンドライン引数は以下の通りです。
「Anne 100 Glbert 99 Diana 60 Emily 89 Bryce 79 Jane 74 Kilmeny 42 Marigold 64」
該当のソースコード
java
1package hello; 2 3public class Seiseki2 { 4 5 public static void main(String[] args) { 6 7 int i = 0; 8 double sum = 0; 9 double average = 0; 10 double sd = 0; 11 12 String names[] = new String[args.length/2]; 13 double score[][] = new double[2][args.length/2]; 14 15 for(i = 0; i < args.length; i += 2 ) { 16 names[i/2] = args[i]; 17 score[0][i/2] = Double.parseDouble(args[i + 1]); 18 sum += score[0][i/2]; 19 20 }for(i = 0; i < score[0].length; i ++ ) { 21 average = sum / 8.0; 22 double ssum = 0; 23 ssum += sqr(score[0][i/2] - average); 24 sd = Math.sqrt(ssum / (args.length/2)); 25 double hensachi = 50 + ((score[0][i/2] - average)/sd )* 10; 26 score[1][i] = hensachi; 27 28 } System.out.println("Average = " + average); 29 System.out.println("Standard Deviation = " + sd); 30 for(i = 0; i < 16; i += 2 ) { 31 32 double scoreX = score[0][i/2]; 33 String s = new java.text.DecimalFormat("0.#").format(scoreX ); 34 double scoreY = score[1][i/2]; 35 String ss = new java.text.DecimalFormat("0.#").format(scoreY); 36 37 System.out.print(" " + names[i/2] + " "); 38 System.out.print(s + " "); 39 System.out.println(ss); 40 41 } 42 43 } 44 45 private static double sqr(double d) { 46 return d * d; 47 } 48 49 50} 51 52 53
結果は以下の通りになります。
Average = 75.875
Standard Deviation = 4.640388251536718
Anne 100 78.3
Glbert 99 78.3
Diana 60 78.3
Emily 89 78.3
Bryce 79 21.7
Jane 74 21.7
Kilmeny 42 78.3
Marigold 64 78.3
試したこと
18行目から21行目の式を変えてみたりしましたが、うまくいきません。
補足情報
最終的な形は以下の通りにしたいと思っています。
Average = 75.9
Standard Deviation = 18.85
Anne 100 62.8
Glbert 99 62.3
Diana 60 41.6
Emily 89 57.0
Bryce 79 51.7
Jane 74 49.0
Kilmeny 42 32.0
Marigold 64 43.7
回答5件
あなたの回答
tips
プレビュー