Krótkie zadanie - tablica, średnia wartość, podział na dwie tablice.

0

Siemano! Mam za zadanie utworzenie tablicy jednowymiarowej typu int o rozmiarze 10. Następnie wypełnić ją losowymi liczbami, wyliczyć średnią i utworzyć dwie tablice, gdzie w pierwszej będą przechowywane wartości mniejsze od średniej a w drugiej większe lub równe średniej. Na chwilę obecną zrobiłem to tak:

int tab6[] = new int[10];

        for (int i = 0; i < tab6.length; i++) {
            tab6[i] = (int) (Math.random() * 101);
        }

        System.out.println("Wylosowane liczby: ");
        for (int i = 0; i < tab6.length; i++) {
            System.out.print(tab6[i] + " ");
        }

        int suma = 0;

        for (int i = 0; i < tab6.length; i++) {
            suma = tab6[i] + suma;
        }
        System.out.println();
        System.out.println("Wynik sumowania: " + suma);

        double avg = (double) suma / 10;

        System.out.println("Srednia arytmetyczna: " + avg);

        int sizeM = 0;
        int sizeRW = 0;

        for (int i = 0; i < tab6.length; i++) {
            if (tab6[i] < avg)
                sizeM++;
            else sizeRW++;
        }

        System.out.println("Ilość liczb mniejszych od średniej: " + sizeM);
        System.out.println("Ilość liczb równych, bądź większych od średniej: " + sizeRW);

        int tabM [] = new int[10];
        int tabRW [] = new int [10];

        for(int i=0; i<tab6.length; i++){
            if (tab6[i]<avg)
                tabM[i]=tab6[i];
            else tabRW[i]=tab6[i];
        }

        for (int i=0; i<tabM.length; i++){
            System.out.print(tabM[i]+" ");
        }

        System.out.println();

        for (int i=0; i<tabRW.length; i++){
            System.out.print(tabRW[i]+" ");
        }
    }

Przykładowy wynik w konsoli:

Wylosowane liczby:
54 36 37 28 31 74 26 43 16 96
Wynik sumowania: 441
Srednia arytmetyczna: 44.1
Ilość liczb mniejszych od średniej: 7
Ilość liczb równych, bądź większych od średniej: 3
0 36 37 28 31 0 26 43 16 0
54 0 0 0 0 74 0 0 0 96

Czy ktoś mi podpowie jak wykorzystać znane rozmiary tablicy (tutaj 7 i 3), aby je całkowicie zapełnić bez domyślnych 0? Tutaj z góry założyłem, że rozmiar nowych tablic jest równy tablicy pierwotnej. Kombinowałem, ale za każdym razem wywala ArrayIndexOutOfBoundsException.

0

Stwórz dwie nowe zmienne, które będą operowały na nowych tablicach (np. j i k).
Jeśli jest mniejsza od średniej, dodajesz ją do tab1[j] i inkrementujesz j, tak samo z tab2 i zmienną k

0

Średnią (sumę do średniej) możesz liczyć już podczas wypełniania tablicy liczbami losowymi (możesz też wyświetlać te elementy, więc trzy pierwsze pętle możesz zastąpić jedną). W drugiej pętli, policz ile jest liczb mniejszych od średniej (lub na odwrót: ile większych lub równych), więc będziesz znał rozmiary obu tablic tabM, tabN, w trzeciej pętli segregujesz elementy na większe i mniejsze.

0

Mam problem z trzecią pętlą:

int j =0;
int k= 0;

for(int i=0; i<tab6.length; i++){
            if (tab6[i]<avg)
                tabM[j]=tab6[i];
                j++;
            else tabRW[k]=tab6[i];
            k++;

Próbuję to zrobić w ten sposób, ale nie przechodzi.

1

A klamerki po if i else to gdzie? A jeśli bez klamerek to tabM[j++] = tab6[i] i tabRW[k++] = tab6[i]

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