分析数字

时间:2018-05-28 18:01:39

标签: java arrays int

我试图制作一个分析一组数字的程序非常有用。创建一个Analysis应用程序 提示用户输入1到50范围内的数字,由哨兵终止,然后执行 以下对数字的分析:

•确定平均数

•确定最大数量

•确定范围(最大 - 最小)

•确定中位数(最常发生的数字)

•显示一个名为直方图的条形图,显示每个五个单位范围内的数字(1-5,6-10,11-15等)

截至目前,我正在尝试计算数字,但我似乎并不知道如何计算。有人可以帮助我完成这个程序,并设置正确的方向。这是我的代码,到目前为止只有0。

public class Analasys {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[] number = new int[50];

        int outcome = 1;
        int x = 0;
        while (outcome != 0) {
            System.out.println("Enter a number or enter 0 to quit.");
            outcome = scan.nextInt();
            number[x] = outcome + 1;
        }

        for (int i = 0; i < 50; i++) {
            System.out.println(i + ": " + number[i]);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以将每个单独的操作定义为Function并使用给定的int[] arr输入参数:

public static void main(String[] args) throws ParseException {
    int[] number = new int[50];

    System.out.println("Average: " + MEAN.apply(number));
    System.out.println("Maximum: " + MAX.apply(number));
    System.out.println("Range: " + RANGE.apply(number));
    System.out.println("Median: " + MEDIAN.apply(number));
    Map<Integer, List<Integer>> histogram = HISTOGRAM.apply(number, 5);
}

public static final Function<int[], Double> MEAN = arr -> Arrays.stream(arr).sum() / (double)arr.length;

public static final Function<int[], Integer> MAX = arr -> {
    OptionalInt max = Arrays.stream(arr).max();
    return max.isPresent() ? max.getAsInt() : 0;
};

public static final Function<int[], Integer> MIN = arr -> {
    OptionalInt min = Arrays.stream(arr).min();
    return min.isPresent() ? min.getAsInt() : 0;
};

public static final Function<int[], Integer> RANGE = arr -> MAX.apply(arr) - MIN.apply(arr);

public static final Function<int[], Double> MEDIAN = arr -> {
    arr = Arrays.copyOf(arr, arr.length);
    Arrays.sort(arr);

    int m = arr.length / 2;
    return arr.length % 2 == 0 ? (arr[m - 1] + arr[m]) / 2. : (double)arr[m];
};

public static final BiFunction<int[], Integer, Map<Integer, List<Integer>>> HISTOGRAM = (arr, step) -> {
    Map<Integer, List<Integer>> map = new TreeMap<>();

    for (int val : arr) {
        int key = ((val - 1) / step) + 1;

        if (!map.containsKey(key))
            map.put(key, new ArrayList<>());

        map.get(key).add(val);
    }

    return map;
};