【问题标题】:Finding the mode of an array?寻找数组的模式?
【发布时间】:2017-03-01 04:57:02
【问题描述】:

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

例如,具有元素 {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;
    }

【问题讨论】:

    标签: arrays loops for-loop


    【解决方案1】:

    您的代码中的逻辑不正确。

    在 for 循环的每次迭代 i 中,您将获胜者设置为仅 numbers[i]、numbers[i-1] 或 numbers[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;
    

    【讨论】:

    • if(value > Winner) 方法将无法正常工作,因为如果您有一个包含 {4,4,5,5,5} 的数组怎么办? 3
    猜你喜欢
    • 2017-08-17
    • 2022-06-16
    • 2021-10-14
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2012-07-19
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多