2017-03-01 1 views
0

正しく印刷されていないため、コードに問題があるようです。私はクラスのために作成した別のメソッドを使って配列のモードを見つけようとしています。アレイのモードを見つける?

たとえば、要素が{4,4,4,5,5}の配列は、モードを4ではなく5として出力します。なぜですか?

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]、数字[i-1]、または数字[0]だけに設定します。勝者変数を保持する必要があるので、これは間違っています。

また、occr関数に対する多くの不要な呼び出しを実行します。 配列内のすべてのインデックスに対して1回だけ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

{value> winner)メソッドが正しく機能しない場合、{4,4,5,5,5}の配列を持っているとどうなりますか? 3 <5&モードは5ではなく4になりますか? –

関連する問題