public interface Average {
public double avg(double[] params);
}
--------------------first1--------------------------
public class First implements Average {
/**
* 求傳入數組的平均值
* */
public double avg(double[] params) {
double total = 0;
for (double s : params) {
total = MathUtil.add(total, s);// 精確求值
}
// 循環結束後返回平均數
return MathUtil.divide(total, params.length);
}
}
--------------------------second--------------------------------------------
import java.util.Arrays;
public class Second implements Average {
/**
* 去掉最高分最低分求平均值值
* */
public double avg(double[] params) {
//排序數組,去掉最高最低分
Arrays.sort(params);
double total = 0;
//不循環第壹個(最小值) 和最後壹個(最大值)
for(int i=1;i<params.length-1;i++){
total = MathUtil.add(total, params[i]);// 精確求值
}
// 循環結束後返回平均數
return MathUtil.divide(total, params.length-2);
}
}
--------------------------------util-------------------------------------
import java.math.BigDecimal;
public class MathUtil {
/**
* 加
* */
public static double add(double d1, double d2) {
BigDecimal bd1 = new BigDecimal(String.valueOf(d1));
BigDecimal bd2 = new BigDecimal(String.valueOf(d2));
return bd1.add(bd2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 減
* */
public static double subtract(double d1, double d2) {
BigDecimal bd1 = new BigDecimal(String.valueOf(d1));
BigDecimal bd2 = new BigDecimal(String.valueOf(d2));
return bd1.subtract(bd2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 除
* */
public static double divide(double d1, double d2) {
if (d2 != 0) {
BigDecimal bd1 = new BigDecimal(String.valueOf(d1));
BigDecimal bd2 = new BigDecimal(String.valueOf(d2));
return bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
} else {
return 0;
}
}
/**
* 乘
* */
public static double multiply(double d1, double d2) {
BigDecimal bd1 = new BigDecimal(String.valueOf(d1));
BigDecimal bd2 = new BigDecimal(String.valueOf(d2));
return bd1.multiply(bd2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
------------------------------Test-----------------------------------------
import java.util.Scanner;
public class Test {
//返回數組的方法
public static double[] getArrays(){
double[] d = new double[20];
// 循環調用鍵盤輸入類為數組賦值
System.out.println("請輸入20個數字。");
for (int i = 0; i < 20; i++) {
Scanner input = new Scanner(System.in);
try {
d[i] = input.nextDouble();
System.out.println("您已輸入了" + (i + 1) + "個數字。");
} catch (Exception e) {// 如果輸入不正確返回重新輸入賦值
System.out.println("輸入不正確請重新輸入。");
i--;
continue;
}
}
return d;
}
public static void main(String[] args) {
while (true) {
Scanner s = new Scanner(System.in);
System.out.println("請選擇計算方法 (A:全部平均數,B:去掉最高最低分求平均數)");
String flag = s.next();
if (flag != null && !"".equals(flag)) {
if ("A".equals(flag.toUpperCase())) {// 求全部平局數
// 賦值結束調用接口求平均數方法
Average a = new First();
double avg = a.avg(getArrays());
System.out.println("平均數為:" + avg);
break;
} else if ("B".equals(flag.toUpperCase())) {// 求去掉最高分和最低分的平均數
// 賦值結束調用接口求平均數方法
Average a = new Second();
double avg = a.avg(getArrays());
System.out.println("平均數為:" + avg);
break;
}
}
}
}
}