2017-03-01 52 views
0

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

例如,一个包含元素{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; 
    } 

回答

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; 
+0

如果(值>赢家)方法将无法正常工作,因为如果您有一个{4,4,5,5,5}的数组会怎么样? 3 <5&模式将是4而不是5? –