2017-03-01 6 views
0

Ich habe Probleme mit meinem Code, weil er nicht korrekt gedruckt wird. Ich versuche, den Modus eines Arrays mit einer anderen Methode zu finden, die wir für die Klasse erstellt haben.Den Modus eines Arrays finden?

Zum Beispiel, ein Array mit den Elementen {4,4,4,5,5}, druckt den Modus als 5 statt 4. Warum ist das?

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; 
    } 

Antwort

0

Die Logik in Ihrem Code ist falsch.

Bei jeder Wiederholung i Ihrer for-Schleife setzen Sie den Gewinner als nur Zahlen [i], Zahlen [i-1] oder Zahlen [0]. Dies ist falsch, da Sie Ihre Gewinnvariable beibehalten sollten.

Sie führen auch viele unnötige Aufrufe der Occr-Funktion durch. Sie müssen die occr-Funktion nur einmal für jeden Index innerhalb Ihres Arrays aufrufen.

+0

wenn (Wert> Gewinner) -Methode wird nicht funktionieren obwohl richtig, was ist, wenn Sie ein Array mit {4,4,5,5,5} haben? 3 <5 & der Modus wäre 4 statt 5? –

Verwandte Themen