我必须编写方法来查找给定数字数组的均值,中位数,模式等。我已经完成了其他所有工作,但模式给了我一些时间,并且不知道为什么。
阵列是22,26,45,46,49,55,57,63,63,65,66,67,67,68,68,69,70,71,72,73,75,76, 76,77,77,78,78,78,79,82,82,83,84,85,87,88,88,89,89,91,92,98,99
当答案应为78时,它返回22.
这是我的代码:
public static int mode(int[] array){
int[] countArray = new int[101];
//counts each number
for(int i = 0; i < array.length; i++){
countArray[array[i]]++;
}// end for loop
int mode = array[0], modeIndex = 0;
//finds which number occurs the most
System.out.println(Arrays.toString(countArray));
for(int i = 1; i < array.length; i++){
if(countArray[i] > mode){
mode = countArray[i];
modeIndex = i;
System.out.println(mode + " " + modeIndex);
}// end if
}// end for loop
return modeIndex;
}// end method mode
答案 0 :(得分:1)
你有一个错误,你需要更改的两行是:
if(countArray[i] > mode){
mode = countArray[i];
为:
if(countArray[array[i]] > mode){
mode = array[i];
答案 1 :(得分:1)
你的错误是:int mode = array [0],应该有int mode = countArray [0] 在循环中你应该使用countArray的大小,而不是数组。 该代码正常工作(结果为78)
public static int mode(int[] array){
int[] countArray = new int[101];
//counts each number
for(int i = 0; i < array.length; i++){
countArray[array[i]]++;
}// end for loop
int mode = countArray[0], modeIndex = 0;
//finds which number occurs the most
System.out.println(Arrays.toString(countArray));
for(int i = 1; i < countArray.length; i++){
if(countArray[i] > mode){
mode = countArray[i];
modeIndex = i;
System.out.println(mode + " " + modeIndex);
}// end if
}// end for loop
return modeIndex;
}// end method mode`
答案 2 :(得分:1)
另一种方法是使用HashMap
代码:
int arraya[] = {22, 26, 45, 46, 49, 55, 57, 63, 63, 65, 66, 67, 67, 68, 68, 69, 70, 71, 72, 73, 75, 76, 76, 77, 77, 78, 78, 78, 79, 82, 82, 83, 84, 85, 87, 88, 88, 89, 89, 91, 92, 98, 99};
List<Integer> array = new ArrayList<>();
for (int i = 0; i < arraya.length; i++) {
array.add(arraya[i]);
}
HashMap<Integer, Integer> count = new HashMap<>();
for (Integer i : array) {
if (count.containsKey(i)) {
int c = count.get(i);
count.put(i, c + 1);
} else {
count.put(i, 1);
}
}
List listOfOccurance = new ArrayList();
Set<Map.Entry<Integer, Integer>> entrySet = count.entrySet();
for (Map.Entry<Integer, Integer> entry : entrySet) {
System.out.println(entry.getKey() + " = " + entry.getValue());
listOfOccurance.add(entry.getValue());
}
Integer i = (Integer) Collections.max(listOfOccurance);
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
if ((Integer) pairs.getValue() == i) {
System.out.println(pairs.getKey());
return;
}
it.remove(); // avoids a ConcurrentModificationException
}
输出:
65 = 1 66 = 1 67 = 2 68 = 2 69 = 1 70 = 1 71 = 1 72 = 1 73 = 1 75 = 1 76 = 2 77 = 2 78 = 3 79 = 1 82 = 2 83 = 1 84 = 1 85 = 1 22 = 1 87 = 1 88 = 2 89 = 2 26 = 1 91 = 1 92 = 1 98 = 1 99 = 1 45 = 1 46 = 1 49 = 1 55 = 1 57 = 1 63 = 2
The mode is 78