Dominanta(moda)

0

Witam. Chciałem wyznaczyć Modę(dominantę) tablicy jednowymiarowej i napisać ile razy się powtórzyła. Próbowałem kombinować ale nic nie wychodziło. W końcu stanąłem na czymś takim i wygląda to źle. Ma ktoś jakiś pomysł co zmienić?

package zajecia4;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class OdczytpilkuV2 {

    public static void main(String[] args) {
        try {
            Scanner skan = new Scanner(new File("liczby.txt"));

            int[] tablica = new int[100];
            int i = 0;

            while (skan.hasNextLine()) {
                String napis = skan.nextLine();
                int liczba = Integer.parseInt(napis);
                tablica[i] = liczba;
                i++;
            }
// Moda
            int moda = 0;
            int licznik2 = 1;
            for (int j = 0; j < tablica.length; j++) {
                moda = tablica[j];
                if (moda == tablica[j+1])
                    licznik2 = licznik2 + 1;    
             }

System.out.println("Dominanta wynosi :"+moda+" powtórzyła się "+licznik2+" razy")

        } catch (FileNotFoundException plik) {
            System.out.println("Brak tego pliku");
        }

    }

}


1

Wczytaj linie z pliku do mapy w której kluczem będzie liczba, która zaliczasz a wartością ilość wystąpień.
Robisz coś takiego:
Tworzysz nową mapę <Integer, Integer>.
Teraz linia po linii, sprawdzasz czy mapa posiada klucz == liczbie, jeśli nie to dodajesz do mapy parę klucz, 1, jeśli tak, to updatejuesz element mapy == liczba, wartością powiększoną o jeden.

Na końcu pobierasz strumień wartości z mapy i znajdujesz największą wartość

0

Dobra chyba mam, nie zrobiłem tak jak pisałeś ale to co napisałem powinno być już dobrze, przynajmniej zgadzało mi się z plikiem.

int moda = 0;
            int maks = 0;
            int licznik2 = 1;
            for (int j = 0; j < tablica.length; j++) {
                licznik2 = 0;
                for (int k = 0; k < tablica.length; k++) {
                    if(tablica[j] == tablica[k]) 
                        licznik2++;
                         if (licznik2 > maks) {
                            moda = tablica[j];
                            maks = licznik;
                         }       
                }
            }

1 użytkowników online, w tym zalogowanych: 0, gości: 1