前提・実現したいこと
コマンドライン引数から成績を処理するコードをつくっているのですが、結果が模範解答とあいません。
平均値はあっているのですが、標準偏差がどうしてもあいません。
解決方法を教えてください。お願いします。
ちなみにコマンドライン引数は以下の通りです。
「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 double ssum = 0; 12 13 String names[] = new String[args.length/2]; 14 double score[][] = new double[2][args.length/2]; 15 16 for(i = 0; i < args.length; i += 2 ) { 17 names[i/2] = args[i]; 18 score[0][i/2] = Double.parseDouble(args[i + 1]); 19 sum += score[0][i/2]; 20 21 }for(i = 0; i < args.length/2; i ++ ) { 22 average = sum / (args.length/2); 23 ssum += sqr(score[0][i] - average); 24 sd = Math.sqrt(ssum / (args.length/2)); 25 double hensachi = 50 + ((score[0][i] - 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 < args.length/2; i ++) { 31 32 double scoreX = score[0][i]; 33 String s = new java.text.DecimalFormat("0.#").format(scoreX ); 34 double scoreY = score[1][i]; 35 String ss = new java.text.DecimalFormat("0.#").format(scoreY); 36 37 System.out.print(" " + names[i] + " "); 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 54
結果は以下の通りになります。
Average = 75.875
Standard Deviation = 4.198446513295126
Anne 100 78.3
Glbert 99 78.3
Diana 60 21.7
Emily 89 78.3
Bryce 79 78.3
Jane 74 21.7
Kilmeny 42 21.7
Marigold 64 21.7
補足情報
最終的な形は以下の通りにしたいと思っています。
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
###追記
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 double ssum = 0; 12 13 String names[] = new String[args.length/2]; 14 double score[][] = new double[2][args.length/2]; 15 16 for(i = 0; i < args.length; i += 2 ) { 17 names[i/2] = args[i]; 18 score[0][i/2] = Double.parseDouble(args[i + 1]); 19 sum += score[0][i/2]; 20 21 }for(i = 0; i < args.length/2; i ++ ) { 22 average = sum / (args.length/2); 23 ssum += sqr(score[0][i] - average); 24 25 }for(i = 0; i < args.length/2; i ++ ) { 26 sd = Math.sqrt(ssum / (args.length/2)); 27 }for(i = 0; i < args.length/2; i ++ ) { 28 double hensachi = 50 + ((score[0][i] - average)/sd )* 10; 29 score[1][i] = hensachi; 30 31 } System.out.println("Average = " + average); 32 System.out.println("Standard Deviation = " + sd); 33 for(i = 0; i < args.length/2; i ++) { 34 35 double scoreX = score[0][i]; 36 String s = new java.text.DecimalFormat("0.#").format(scoreX ); 37 double scoreY = score[1][i]; 38 String ss = new java.text.DecimalFormat("0.#").format(scoreY); 39 40 System.out.print(" " + names[i] + " "); 41 System.out.print(s + " "); 42 System.out.println(ss); 43 44 } 45 46 } 47 48 private static double sqr(double d) { 49 return d * d; 50 } 51 52} 53
解決しました。ありがとうございます。
結果は以下の通りになりました。
Average = 75.875
Standard Deviation = 18.850978091335207
Anne 100 62.8
Glbert 99 62.3
Diana 60 41.6
Emily 89 57
Bryce 79 51.7
Jane 74 49
Kilmeny 42 32
Marigold 64 43.7
回答1件
あなたの回答
tips
プレビュー