求平均值(mean)、众数(mode)和中位数(median)。
编写一个Java程序来接受n实数并报告这三个中间值。
您需要编写3个方法来完成任务,遵循以下方法签名(图片上有)
下面是这个题的例子,需要做成图片上的样子,麻烦大神帮忙!
思路:
1.输入数字n
2.创建数字,大小为n
3.遍历求和,除以n即平均数
4.n/2即中位数。
package com.csdn;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入n:\t");
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
System.out.printf("请输入第%d个数:\t", i + 1);
arr[i] = scanner.nextInt();
}
System.out.println("输入:" + Arrays.toString(arr));
System.out.println("平均值是:" + mean(arr));
System.out.println("众数是:" + mode(arr));
System.out.println("中位数是:" + median(arr));
scanner.close();
}
// 求平均值
private static double mean(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return (double) sum / arr.length;
}
// 求众数
private static List<Integer> mode(int[] arr) {
// 先排序
Arrays.sort(arr);
Map<Integer, Integer> map = new HashMap<>();
Set<Map.Entry<Integer, Integer>> set = map.entrySet();
List<Integer> list = new ArrayList<>();
// 结果
List<Integer> res = new ArrayList<>();
// 统计元素出现的次数,存入Map集合
for (int item : arr) {
map.put(item, map.getOrDefault(item, 0) + 1);
}
// 将出现的次数存入List集合
map.forEach((k, v) -> {
list.add(v);
});
// 得到最大值
Collections.sort(list);
int max = list.get(list.size() - 1);
// 根据最大值获取众数
for (Map.Entry<Integer, Integer> entry : set) {
if (entry.getValue() == max) {
res.add(entry.getKey());
}
}
return res;
}
// 求中位数
private static double median(int[] arr) {
// 先排序
Arrays.sort(arr);
// 如果是偶数,则为中间两个数的和除以2
if (arr.length % 2 == 0) {
return (double) ((arr[arr.length / 2 - 1] + arr[arr.length / 2])) / 2;
}
// 否则就是中间这个数
return arr[arr.length / 2];
}
}