我试图制作一个分析一组数字的程序非常有用。创建一个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]);
}
}
}
答案 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;
};