我的代码似乎遇到了问题,因为它无法正确打印。我正在尝试使用我们为类创建的另一种方法来查找数组的模式。
例如,具有元素{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 :(得分: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;