找到阵列的模式?

时间:2017-03-01 04:57:03

标签: arrays loops for-loop

我的代码似乎遇到了问题,因为它无法正确打印。我正在尝试使用我们为类创建的另一种方法来查找数组的模式。

例如,具有元素{4,4,4,5,5}的数组将模式打印为5而不是4.为什么会这样?

public static int mode(int[] numbers) {
    int winner = 0;


    for(int i=1; i<numbers.length; i++){
        winner = numbers[0];
        if ( occr(numbers,numbers[i]) == occr(numbers,numbers[i-1]) ){
            winner = numbers[i];}

        else if( occr(numbers,numbers[i]) > occr(numbers,numbers[i-1]) ){
            winner = numbers[i];}

        else if( occr(numbers,numbers[i]) < occr(numbers,numbers[i-1]) ){
            winner = numbers[i-1];}
    }
    return winner;
    }



public static int occr(int[] numbers, int x){
    int counter = 0;

    for(int i = 0; i < numbers.length; i++){
        if(numbers[i] == x){
            counter++; }
    }
    return counter;
    }

1 个答案:

答案 0 :(得分:0)

代码中的逻辑不正确。

在for循环的每次迭代中,您将获胜者设置为仅数字[i],数字[i-1]或数字[0]。这是不正确的,因为你应该保留你的赢家变量。

您还会对occr函数执行大量不必要的调用。 您只需要为数组中的每个索引最多调用一次occr函数。

int winner = numbers[0];
for (int i = 1; i < numbers.length; i++){
  int value = occr(numbers, numbers[i]);
  if(value > winner)){
     winner = value;
  }
}
return winner;