【发布时间】:2017-01-11 06:33:19
【问题描述】:
您好,我的模态值代码有问题。这是我的代码:
public class basicStatistics {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
int[] arrCount = new int[n];
int maxCount = 0;
double median = 0.0, mean = 0.0;
for(int i = 0; i < n; i++) {
arr[i] = in.nextInt();
mean = mean + arr[i];
}
mean = mean/n;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++){
if(arr[i] == arr[j]){
arrCount[i]++;
}
if(maxCount < arrCount[i])
maxCount = i;
}
}
Arrays.sort(arr);
if(n%2 == 0) {
median = arr[n/2] + arr[n/2-1];
median = median/2;
} else {
median = arr[n/2];
}
System.out.printf("%.1f\n", mean);
System.out.printf("%.1f\n", median);
System.out.println(arr[maxCount]);
}
}
问题是当输入如下时我无法正确获取模态值:http://pastebin.com/HCqTrimY 我使用了 pastebin,因为它输入了 2500 个数字。我的代码为 Mode 输出数组值 259 而不是 2184 但是如果输入是 n = 10 并且数字 = 64630 11735 14216 99233 14470 4978 73429 38120 51135 67060 我得到正确的模式值或其他情况。
我还想利用 Java8 结构将代码转换为更高效的代码。提前谢谢你!
【问题讨论】:
-
你真的要测试
if(arr[i] == arr[j])ifi==j吗? -
hmm.. 我在想我在第二次修订时删除了它。我将如何消除它?我之前在 if(arr[i]==arr[j]) { ... } 上方添加了一个 if(i != j) { ... }
标签: java java-7 mean median mode