java 计算平均值,去除不合理的数据
2017-01-10 21:34
211 查看
package com.ine.tool; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 计算平均值,去除不合理的数据 * * @author Ro * */ public class AverageTool { /** * 主方法 */ public static int getAverage(String str_int_arr) { int[] int_arr = stringToIntWhitSort(str_int_arr.split(",")); if (1 < int_arr.length) { return getAverageByGoodList(getGoodListByBaseList(getBaseListByIntArray(int_arr))); } return Integer.parseInt(str_int_arr); } /** * 将String数组转换为int数组 */ private static int[] stringToIntWhitSort(String[] arrs) { int[] ints = new int[arrs.length]; for (int i = 0; i < arrs.length; i++) { ints[i] = Integer.parseInt(arrs[i]); } Arrays.sort(ints); System.out.println("ints:" + Arrays.toString(ints)); return ints; } /** * 将int数组根据计算的基准值按块分离 */ private static List<List<Integer>> getBaseListByIntArray(int[] int_arr) { List<List<Integer>> list = new ArrayList<List<Integer>>(); list.add(new ArrayList<Integer>()); int list_index = 0; int average_flag = 0; int sum_temp = 0; for (int i : int_arr) { sum_temp += i; } average_flag = sum_temp / int_arr.length; System.out.println("average_flag:" + average_flag); for (int i = 0; i < int_arr.length - 1; i++) { if (average_flag >= Math.abs(int_arr[i] - int_arr[i + 1])) { list.get(list_index).add(int_arr[i]); } else { list.get(list_index++).add(int_arr[i]); list.add(new ArrayList<Integer>()); } if ((i + 2) == int_arr.length) { list.get(list_index).add(int_arr[i + 1]); } } System.out.println("getBaseListByIntArray:" + list.toString()); return list; } /** * 筛选留下数据最多的块 */ private static List<List<Integer>> getGoodListByBaseList( List<List<Integer>> list) { if (1 < list.size()) for (int i = 1; i < list.size(); i++) { if (list.get(0).size() != list.get(i).size()) { if (list.get(0).size() < list.get(i).size()) { list.remove(0); } else { list.remove(i); } i--; } } System.out.println("getGoodListByBaseList:" + list.toString()); return list; } /** * 将块计算平均值,如果数据大于两位,则个位四舍五入 */ private static int getAverageByGoodList(List<List<Integer>> good_list) { int average = 0; int sum_temp = 0; int sum_index = 0; for (List<Integer> t_list : good_list) { for (int i : t_list) { sum_temp += i; sum_index += 1; } } average = sum_temp / sum_index; if (10 < average) average = (average + 5) / 10 * 10; return average; } }
相关文章推荐
- JAVA写个东西读取TXT中的数据 且要计算出平均值和总值 最后还要按总值排序
- 一是关于怎样找出和去除重复数据,这在另一个帖子利已有详细介绍。二是关于找出某一列里最大或最小的前几个,或是大于或小于某一个值(最大值或平均值)的数据
- 每N条数据计算一次平均值
- java编程之计算圆柱体积(从对话窗体输入数据)
- java中重复数据的去除
- java 去除数组重复数据,并输出重复数据值
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 5种java数据计算的解决方法
- java编程之计算矩阵对角线和(从对话窗体输入数据)
- java编程之计算矩阵对角线和(从命令窗输入数据)
- 纯JAVA大数据计算引擎
- 读取文件中的数据,并且计算其平均值和标准偏差
- java中数据类型取值范围的计算
- java计算String类型的数据
- java编程之比较大小并计算差值(从对话窗体输入数据)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java程序设计(十一)----计算的窗口求和求平均值
- 计算数据的平均值、方差和标准差
- 5种java数据计算层的解决方法