Twitter: @grzegg
Kategoria: java, Tagi: - - .

Java [43] – Zadania do tablic jednowymiarowych

Dodatkowe zadania, niektóre wraz z rozwiązaniami do części ćwiczeń kursu poświęconej tablicom jednowymiarowym (wersja uaktualniona z nowym zadaniem).


Zadania i rozwiązania

Zadanie 1 – odwracanie tablicy

Jest to klasyczny problem dotyczący tablic.

  • Stwórz tablicę 10-elementową, wypełnioną liczbami.
  • Odwróć kolejność liczb w tablicy.
  • Wydrukuj zawartość tablicy.

Zanim przejdziesz do wskazówek, spróbuj sam rozwiązać zadanie.

Kod

Zadanie 2 – obliczanie wariancji

Tym razem obliczymy wariancję dla zestawu liczb, które mogą być np. pomiarami.

  • Stwórz tablicę 1-wymiarową, wypełnioną liczbami typu double.
  • Oblicz i wydrukuj wariancję dla tego zestawu liczb.

Wzór na wariancję wygląda tak:

Gdzie:

  • s2 – wariancja
  • xi – kolejny pomiar
  • xs – średnia z pomiarów
  • N – liczba pomiarów

Zanim przejdziesz do wskazówek, spróbuj sam rozwiązać zadanie.

Kod

Zadanie 3 – Wartości unikalne w tablicy

Utwórz tablicę z liczbami całkowitymi, niektóre z nich powinny się powtarzać a następnie:

  1. Wypisz liczby, które się nie powtarzają
  2. Utwórz tablicę z wszystkimi liczbami, które wystepują w tablicy ale każda z nich powinna wystepować tylko tylko raz. Np: na podstawie tablicy [0, 2, 4, 2, 6, 7, 4, 3, 12, 6] utwóż tablicę [0, 2, 4, 6, 7, 3, 12].
    Kolejność liczb jest obojętna.

8 komentarzy Java [43] – Zadania do tablic jednowymiarowych

  • Łukasz

    Zadanie 1

    import java.util.Arrays;
    import java.util.Random;

    public class ArrayOne {
    public static void main(String[] args) {
    int [] tabOne = new int [10];
    for (int i = 0; i < tabOne.length; i++){
    Random randomNumber = new Random();
    int randomNumberOfArray = randomNumber.nextInt(100) + 1;
    tabOne [i] = randomNumberOfArray;
    }
    System.out.println("The array witch randoms number is: " + Arrays.toString(tabOne));

    int [] tabTwo = new int [tabOne.length];
    for (int i = 0; i<tabTwo.length; i++){
    tabTwo[i] = tabOne[tabOne.length – 1 – i];
    }
    System.out.println("The reverse order numbers in tabOne: " + Arrays.toString(tabTwo));
    }
    }

  • Łukasz

    Zadanie 2

    import java.util.Arrays;
    import java.util.Scanner;

    import static java.lang.Math.pow;

    public class ArrayTwo {
    public static void main(String[] args) {
    System.out.println(„Enter the size of the board. \nChoose number from 5 to 10”);
    int arraySize;

    do {
    Scanner yourNumber = new Scanner(System.in);
    arraySize = yourNumber.nextInt();
    if (5 <= arraySize && arraySize <=10) System.out.println("You seted array size as " + arraySize + ".");
    else System.out.println("Wrong! Choose number from 5 to 10!");
    } while (arraySize 10);

    double [] tab = new double [arraySize];
    for (int i = 0; i< tab.length; i++) {
    tab [i] = Math.random();
    }
    System.out.println("Array with random double numbers: " + Arrays.toString(tab));

    double arithmeticAverago;
    double sumOfArrayElements = 0;
    for (int i = 0; i<tab.length; i++){
    sumOfArrayElements += tab [i];
    }
    arithmeticAverago = (sumOfArrayElements/tab.length);
    System.out.println("The arithmetic average of array elements is: " + arithmeticAverago);

    double sumOfSubstraction = 0;
    for (int i = 0; i<tab.length; i++){
    sumOfSubstraction += pow((tab[i] – arithmeticAverago),2);
    }
    double variance = (sumOfSubstraction)/(tab.length – 1);
    System.out.println("The variance of numbers in array is: " + variance);
    }
    }

  • Say

    Cześć,
    Mam pytanie odnośnie warunku w wierszu 096: if (!duplikaty[i])
    Czy jest on konieczny? Ten zapis oznacza: „jeżeli wartość elementu 'i’ tablicy jest fałszywa” czy, że ten element nie ma przypisanej wartości?
    Będę wdzięczny za rozjaśnienie.

    • Say

      Mam na myśli rozwiązanie zadania 3.

    • Grzegorz

      Tablica duplikaty[], jest domyślnie wypełniona wartościami false (zob. http://ggoralski.pl/?p=1631).
      W tym fragmencie kodu, do kolejnych elementów tablicy tablica[] są przyrównywane następne elementy tej tablicy. Jeśli któryś z tych kolejnych jest taki sam (taka sama liczba), to w miejscu, w którym on występuje (w danym indeksie) zmieniamy domyślną wartość false na true, czyli zaznaczamy, że w tym miejscu (w tablica[]) znajduje się duplikat. Skoro już wiemy, że jest to duplikat, nie ma sensu go sprawdzać.
      Zapis !duplikaty[i] oznacza: „nie true” czyli kod wykona się, jeśli w danym miejscu tablicy duplikaty[] znajduje się wartość false.

  • Say

    Grzegorz, dziękuję za wyjaśnienie. Zastanawiał mnie głównie fakt, że jeżeli tablica duplikaty nie była wcześniej używana, a w tej pętli for licznik 'i’ będzie cały czas zwiększany to każdy ze sprawdzanych elementów będzie na początku false, więc sprawdzenie warunku !duplikaty[i] będzie za każdym razem miało wartość true. Rozumiem, że to jest zabezpieczenie, ale czy w tym przypadku jest konieczne?
    Może coś przeoczyłem lub nie uwzględniłem czegoś?

    • Grzegorz

      To może po kolei:

      Na początku tablice wyglądają tak:
      tablica: [0, 2, 4, 2, 6, 7, 4, 3, 12, 6]
      duplikaty: [F, F, F, F, F, F, F, F, F, F]

      Sprawdzamy pierwszy element w tablica[].
      0 jest porównywane do wszystkich następnych elementów (w pętli wewnętrznej)
      Nie ma on duplikatu, więc nic się nie zmienia.
      Teraz porównujemy z następnymi element drugi, o wartości 2. Czwarty element (indeks 3) też wynosi 2 więc w tablicy duplikaty zmienia się wartość pod indeksem 3 z F na T (true). Tak sobie zanaczyliśmy, że element pod indeksem 3 jest duplikatem.
      Następnie testowany jest element trzeci (indeks 2, wartość 4), ten znów ma duplikat pod indeksem 6, więc tu też zmienia się wartoćc w tablicy duplikaty[]. Teraz wygląda ona tak:
      [F, F, F, T, F, F, T, F, F, F]
      Kolej na sprawdzenie elementu czwartego (indeks 3). To był znaleziony duplikat dla drugiego elementu tablicy, co zaznaczyliśmy w tablicy duplikaty[].
      Skoro wiemy, że nie jest to wartość unikalna, i że inne te same wartości już zostały zaznaczone (jeśli były) w tablicy duplikaty, to nie ma sensu sprawdzać tej wartości czy nie jest duplikatem (bo wiemy, że jest). Po to jest ten warunek.

      Gdyby go ominąć, kod (na oko) też by działał, ale wykonywałby niepotrzebne operacje, co oczywiście przy tak małej tablicy i tak byłoby nie od zauważenia.

      Swoją droga warto samemu poeksperymentiować i sprawdzić „co się stanie jeśli zmienię ten fragment kodu”, tak się można sporo nauczyć :-)

  • Say

    Faktycznie przeoczyłem to, że później j jest indeksem elementu tablicy. Dzięki za poświęcony czas! :)
    Testowałem usuwając ten warunek i wyniki były identyczne. A przez to, że na początku się zafixowałem nie mogłem już dostrzec reszty.jeszcze raz dzięki!

Leave a Reply