私はこのような在宅勤務の問題を抱えています:
次のデータは、地震のマグニチュードデータを表しています。有効な地震データの平均を計算して印刷するプログラムを作成します。
Richter値を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}
- 配列の最大値と最小値を決定します。
- 最大値と最小値を除いて、配列の内容の平均を計算します。
- 最大値と最小値を除いた配列の値を出力します。
- 平均を印刷します。
以下のコードを完成させてください。
次のコードでこの問題を試しましたが、新しい配列のnull値を取得しています。
public class QuakeLevels {
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 minQuakeLevel = Double.MAX_VALUE;
Double maxQuakeLevel = Double.MIN_VALUE;
double totalQuakeLevels =0.0;
double avgQuakeLevels =0.0;
Double[] newQuakeLevels = new Double[(quakeLevels.length-2)]; //array excluding min and max value from the original
for(int i=0;i<quakeLevels.length;i++){
totalQuakeLevels+=quakeLevels[i];
if(quakeLevels[i]<minQuakeLevel) {
minQuakeLevel=quakeLevels[i];
}
if(quakeLevels[i]>maxQuakeLevel){
maxQuakeLevel =quakeLevels[i];
}
}
avgQuakeLevels = ((double)totalQuakeLevels-(minQuakeLevel+maxQuakeLevel))/(quakeLevels.length-2); // Excluding min and max Quake Levels to calculate average
System.out.printf("%s%.1f\n","Average Quake Level= ",avgQuakeLevels);
System.out.print("The new quake level:");
for(int i=0;i<quakeLevels.length-2;i++){
if(newQuakeLevels[i]!=minQuakeLevel && newQuakeLevels[i]!=maxQuakeLevel){
quakeLevels[i]=newQuakeLevels[i];
System.out.printf("%6s",newQuakeLevels[i]);
}
}
System.out.println("");
}
}