operacje na plikach w języku Java
Operacje na plikach w języku Java
17 sierpnia 2016
try-with-resources
Konstrukcja try-with-resources w języku Java
25 sierpnia 2016
zadanie java maszyna losująca

Artykuł ten jest pierwszym z artykułów w Strefie Zadaniowej Samouka. Programowania najlepiej jest się uczyć na przykładach, ten artykuł opisuje właśnie jeden z takich przykładów. Specyfikuje dokładnie sposób zachowania prostego programu i przedstawia jego przykładowe rozwiązanie. Zapraszam do lektury.

Opis zadania

W dzisiejszej części napiszesz program, który użyłem do rozstrzygnięcia konkursu, w którym Samouczek Programisty rozdawał książki. W konkursie należało wypełnić prostą ankietę, wśród uczestników zostały rozlosowane dwie książki. Każdy, kto uzupełnił ankietę dostawał jeden los. Dodatkowo, jeśli osoba wskazała kogoś innego jako polecającego, polecający dostawał dodatkowy los w loterii.

Ankieta została przeprowadzona przy pomocy narzędzia Google Forms, z którego następnie wyniki zostały wyeksportowane do pliku CSV (ang. comma separated values). Plik CSV to jeden z formatów plików tekstowych, w którym jedna linijka odpowiada jednemu rekordowi. Plik ten zawiera kilka kolumn, których zawartość oddzielona jest przecinkami. Plik zawiera też nagłówek, opisujący nazwy kolumn.

W przykładzie poniżej mamy dwa rekordy z takiego pliku. Irek dostaje dwa losy, Mateusz jeden. Dzieje się tak ponieważ Irek polecił Samouczka Mateuszowi.

Twoim zadaniem jest napisanie programu, który pobierze od użytkownika dwa argumenty:

  • ścieżkę do pliku wejściowego w formacie CSV na dysku opisanym powyżej (możesz ściągnąć przykładowy plik, który dla Ciebie przygotowałem),
  • liczbę N >= 1 przedstawiającą liczbę wygrywających.

Program powinien wczytać zawartość pliku, wyłuskać adresy email a następnie wśród tych adresów wylosować N wygranych. Dla uproszczenia zakładamy, że format pliku jest poprawny oraz, że uczestnicy konkursu nie oszukiwali (nie było podwójnych losów). Sytuacja w której jeden uczestnik wygrywa dwie książki jest dopuszczalna.

Wskazówki

Dla uproszczenia pokażę Ci parę fragmentów kodu czy metod, które mogą Ci się przydać w rozwiązaniu tego zadania.

Aby podzielić rekord na poszczególne pola możesz użyć metody String.split jak w przykładzie poniżej

Aby z pola otoczonego znakami "" uzyskać wyłącznie jego zawartość możesz użyć wyrażeń regularnych. Na tym etapie proszę użyj przykładowego kodu, o tym czym są wyrażenia regularne przeczytasz w innym artykule.

Metoda ta jako argument przyjmuje wartość pola i zwraca to co znajduje się wewnątrz "" bądź null jeśli pole nie było uzupełnione.

Aby wybrać losowo X wartości musisz losowo rozłożyć adresy email z pliku. Pomóc Ci w tym może metoda Collections.shuffle, która w losowy sposób miesza elementy listy.

Z tymi narzędziami jesteś przygotowany do napisania swojej pierwszej maszyny losującej 🙂 Jeśli będziesz miał jakiekolwiek pytania możesz zasugerować się przykładowym rozwiązaniem, które dla Ciebie przygotowałem. Jak zwykle zachęcam jednak do samodzielnego rozwiązania zadania, w ten sposób nauczysz się najwięcej.

Podsumowanie

Jeśli tego typu sposób nauki Ci się spodobał proszę daj znać 😉 Rozwiązując zadania tego typu w praktyczny sposób przećwiczysz wiedzę, którą zdobyłeś do tej pory. Z biegiem czasu będziesz w stanie rozwiązać zadania o coraz większym poziomie trudności. Wszystko przed Tobą 😉

Na koniec mam do Ciebie prośbę. Zależy mi na dotarciu do jak największego grona czytelników, proszę pomóż mi w tym 🙂 Udostępnij link do bloga na FB swoim znajomym, możesz także zapisać się do newslettera jeśli nie chcesz pominąć kolejnych artykułów. Do następnego razu!

Newsletter

  Jeśli chcesz otrzymywać informacje o nowych artykułach na blogu prosto na Twój email, zapisz się 🙂

Zdjęcie dzięki uprzejmości https://www.flickr.com/photos/mikolski

2 Komentarze

  1. Kuba napisał(a):

    hej,
    moglbys dla ułatwienia dodac link do pliku CSV?:)

    • Marcin Pietraszek napisał(a):

      Cześć Kuba!
      Niestety oryginalnego pliku nie mogę dać, ze względu na adresy email uczestników. Ale przygotowałem dla Was przykładowy plik zgodny z opisanym wyżej formatem, powinien pomóc. Dzięki za sugestię 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *