次のような在宅ワークの問題があります。
次のデータは、地震のリヒター スケール データを表しています。有効な地震データの平均を計算して出力するプログラムを作成します。
リヒター値を quakeLevels という名前の double の配列に格納します。
残念ながら、あなたの地震計は時々信頼できない測定値を生成することが知られています (この例の 10.1 の値のように)。したがって、最大値と最小値を破棄することにします。
プログラムは次のことを行う必要があります。
次のデータを使用して、quakeLevels 配列を宣言し、初期化します。 { 5.6, 6.2, 4.0, 5.5, 5.7, 6.1,7.4, 8.5, 5.5, 6.3, 6.4, 2.1, 6.9, 4.3, 3.1, 7.0, 10.1 }
配列内の最大値と最小値を決定します。最大値と最小値を除いて、配列の内容の平均を計算します。最大値と最小値を除いた配列の値を出力します。平均を出力します。
Math クラスを使用できないため、すべてが最大値と最小値を出力するように書き出されます。
これまでの私のコードは次のとおりです。
public class ARRAYminAndmax0RichterScale
{
public static void main(String [] args)
{
double [] quakeLevels = { 5.6, 6.2, 4.0, 5.5, 5.7, 6.1 ,7.4, 8.5, 5.5, 6.3, 6.4, 2.1, 6.9, 4.3, 3.1, 7.0, 10.1};
double [] quakeLevelsNormalized = new double [(quakeLevels.length - 2)];
int i;
int minIndex = 0; // start with 0th element as min
for ( i = 1; i < quakeLevels.length; i++) {
if (quakeLevels[i] < quakeLevels[minIndex]) {
minIndex = i;
}
}
System.out.print("Min: " + quakeLevels[minIndex] + " ");
int maxIndex = 0; // start with 0th element as max
for ( i = 1; i < quakeLevels.length; i++) {
if (quakeLevels[i] > quakeLevels[maxIndex]) {
maxIndex = i;
}
}
System.out.println("Max: " + quakeLevels[maxIndex]);
System.out.println("The Richter values, excluding the extrema, are as follows: ");
//make a new array excluding the max and min
for ( i = 1; i < quakeLevels.length - 2; i++ ) {
if(quakeLevels[i]!= minIndex && quakeLevels[i]!= maxIndex){
quakeLevelsNormalized[i] = quakeLevels[i];
System.out.printf("%6s\n", quakeLevelsNormalized[i] );
}
}
//***THIS LOOP IS HERE TO HELP ME FIGURE OUT THE PROBLEM***
for( i =0; i < quakeLevelsNormalized.length; i++){
System.out.println("quakeLevelsNormalized["+i+"] = " + quakeLevelsNormalized[i]);
}
//find average of quakeLevelsNormalized
double arrayTotal = 0;
double average = 0;
for (i = 0; i < quakeLevelsNormalized.length; i++) {
arrayTotal = arrayTotal + quakeLevelsNormalized[ i ];
}
average = arrayTotal / quakeLevelsNormalized.length;
//output
System.out.println( quakeLevelsNormalized[i-1]);
System.out.printf("%s%.1f\n","Average Quake Level = ", average);
}
}
そして、次の出力が得られます。
Min: 2.1 Max: 10.1
The Richter values, excluding the extrema, are as follows:
6.2
4.0
5.5
5.7
6.1
7.4
8.5
5.5
6.3
6.4
2.1
6.9
4.3
3.1
quakeLevelsNormalized[0] = 0.0
quakeLevelsNormalized[1] = 6.2
quakeLevelsNormalized[2] = 4.0
quakeLevelsNormalized[3] = 5.5
quakeLevelsNormalized[4] = 5.7
quakeLevelsNormalized[5] = 6.1
quakeLevelsNormalized[6] = 7.4
quakeLevelsNormalized[7] = 8.5
quakeLevelsNormalized[8] = 5.5
quakeLevelsNormalized[9] = 6.3
quakeLevelsNormalized[10] = 6.4
quakeLevelsNormalized[11] = 2.1
quakeLevelsNormalized[12] = 6.9
quakeLevelsNormalized[13] = 4.3
quakeLevelsNormalized[14] = 3.1
3.1
Average Quake Level = 5.2
問題
したがって、これは明らかに本来あるべき姿ではありません。最後に追加の 3.1 が表示されるのはなぜですか? [18 マイナス 2 つの極値] があるはずなのに、14 の要素しかありませんか? 私は初心者のプログラマーです。すべての助けに感謝します!!