查找数组方法的模式(java)

时间:2014-07-02 03:00:47

标签: java

我必须编写方法来查找给定数字数组的均值,中位数,模式等。我已经完成了其他所有工作,但模式给了我一些时间,并且不知道为什么。

阵列是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

3 个答案:

答案 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