Wykład 3 treść

  1. Tablice, wejście – wyjście, wyjątki, formatowanie

  1. Tablice, przechowywanie obiektów

Do przechowywania wielu wartości (zmiennych prostych) tego samego typu służą tablice.

Tablice mogą służyć do przechowywania obiektów (referencji) tego samego typu.

Tablice są najbardziej wydajnym sposobem składowania obiektów. Można tworzyć tablice o rozmiarze znanym podczas liczenia (tablice dynamiczne). Tablice mają wady. Jedną z nich jest to, że nie można ich powiększać w trakcie obliczeń. Oznacza to, że po zbudowaniu odpowiadającego naszym wyobrażeniom o tablicach nie da się później, w sposób wydajny, zmienić rozmiaru tablicy.

Wyjście poza zakres tablicy jest sygnalizowane (wyrzucanie wyjątku), co istotnie ułatwia życie programistom.

Wiele algorytmów wymaga tworzenia obiektów, których liczba jest znana dopiero podczas wykonania programu i w trakcie wykonania programu zmieniana, w sposób nieznany, podczas pisania programu. Zdarza się również, że nie wiadomo, nie tylko ile obiektów zostanie utworzonych, ale również ich typ nie jest do końca sprecyzowany. Potrzebna jest więc możliwość tworzenia dowolnej liczby obiektów, w dowolnej chwili i miejscu. Jest to bardzo istotny problem programistyczny

Oprócz tablic, w Javie jest kilka innych możliwości przechowywania obiektów. Są to różnorodne kolekcje. Liczba przechowywanych w kolekcjach obiektów może się zmieniać w trakcie działania programu. W projekcie kolekcji Javy począwszy od wydania piątego nastąpiły istone zmiany. Zdefiniowano wiele nowych metod. Wprowadzono parametryzację kolekcji i metod.

Przejdziemy do omówienia tablic, a pozostałe kolekcje zostawimy na później. Warto pamiętać, już na wstępie, że w tablicach typów podstawowych są przechowywane wartości, a w tablicach obiektów są przechowywane referencje (inaczej odwołania) do obiektów. Element tablicy obiektów jest odwołaniem do obiektu, a nie samym obiektem.

Przyjrzyjmy się i prześledźmy działanie programu, który zilustruje budowanie i wykorzystywanie tablic zmiennych prostych (wartości), tablic obiektów (referencji). Będą to tablice jedno i wielo -indeksowe.

P10Tablice.java

  1. Operacje wejścia wyjścia, wyjątki, formatowanie, ustawienia lokalne

Umiejętność wprowadzania danych ze standardowego wejścia i z pliku oraz zapisywanie wyników do pliku (standardowe wyjście już znamy) należą do podstawowych umiejętności.

Podczas wykonywania operacji WE/WY mogą pojawić się błędy - wyjątki, musimy uwzględnić w programie ten fakt dołączając listę obsługiwanych wyjątków.

Dane i wyniki powinny mieć określony formacie. Format danych i wyników jest zależny od ustawień lokalnych.

Nazwa pliku z danymi i nazwa pliku (ścieżki dostępu) z wynikami mogą być argumentami wywołania programu.

Wszystkie te zadania są zrealizowane poniższym programie.

P11Wewy.java

W Netbeans, nazwy argumentów programu należy ustawić w "Properties->Run->Arguments" (menu kontekstowe w widoku projektu, dla projektu) projektu.

W nagłówku metody main jest napis throws IOException. Dlaczego taka informacja musi się znaleźć? Wystarczy wiedzieć, że jedna z metod wykorzystywanych w programie może wyrzucać wyjątek. W dokumentacji należy sprawdzić każdą stosowaną w programie metodę pod kątem obsługi wyjątków. Przyjrzyjmy się opisowi metody readLine() w dokumentacji. Ma ona postać następującą:

readLine

public String readLine() throws IOException

Read a line of text. A line is considered to be terminated by any one of a line

feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately

by a linefeed.

Returns:

A String containing the contents of the line, not including any line-termination

characters, or null if the end of the stream has been reached

Throws:

IOException - If an I/O error occurs

I to powoduje, że do metody main należy dołączyć informację o możliwości wyrzucania wyjątków klasy IOException. Więcej na temat wyjątków i sposobów ich przechwytywania i obsługi dowiemy się w następnych wykładach. Bez informacji o możliwości wyrzuczania wyjątków zostanie zgłoszony błąd kompilacji. Nie wszystkie wyjątki muszą być w ten sposób opisywane.

Obiekt System.in odpowiada standardowemu urządzeniu wejścia. Jest budowany automatycznie. Obiekt klasy InputStreamReader odpowiada znakowemu strumieniowi wejściowemu. Argumentem jego konstruktora jest standardowe wejście. Obiekt odpowiadający buforowanemu wejściu (z domyślną długością bufora), jest klasy BufferedReader. Ostatecznie otrzymujemy.

BufferedReader in1 = new BufferedReader(new InputStreamReader(System.in));

Metoda readLine(), pozwala na przeczytanie ze standardowego wejścia ciągu znaków, aż do napotkania nowej linii; znak nowej linii nie jest częścią tekstu. Zwraca ona referencję do obiekut klasy String.

Dla sprawdzenia, drukowany jest wprowadzony uprzednio tekst oraz jego długość (metoda length()) na obiekcie klasy String. Jeśli przeczytany tekst reprezentuje liczbę całkowitą, to można go zamienić na wartość typu całkowitego (metody valueOf(), intValue() z klasy String) i wykorzystać do zdefiniowania tablicy o podanym podczas wykonania programu rozmiarze. W następnych liniach wykonywane są proste operacje na tablicy zmiennych całkowitych.

W wersji 5 Javy powstała klasa Scanner, która upraszcza czytanie danych ze standardowego wejścia. W przykładzie wykorzystana jest metoda nextInt()

Tworzony jest obiekt klasy BufferedReader o nazwie in2, który podobnie jak uprzednio obiekt in1, pozwala na buforowane czytanie, ale tym razem z pliku. Jako argument do konstruktora BufferedReader przekazujemy obiekt klasy FileReader zamiast InputStreamReader.

Z pliku o nazwie dane czytane są dwie linie tekstu. Pierwsza linia tekstu służy do zbudowania obiektu klasy Float przez wykonanie statycznej metody valueOf() z klasy Float, która zamieni przeczytany tekst na liczbę typu float i zwróci referencję do obiektu klasy Float. Druga zainicjuje zmienną podstawową przez zmienienie przeczytanego tekstu na liczbę typu float za pomocą statycznej metody parseFloat() z klasy Float (funkcja jest wywoływana na rzecz klasy).

Klasa Scanner może być wykorzystana do czytania danych z pliku. W przykładzie jest to zapisane w komentarzu. Z pliku "wyniki" czytane są wartości typu float. Jeśli w systemie ustawiono język polski, to używany jest przecinek dziesiętny, nie kropka. Chcąc przeczytać dane napisane w pliku "dane", musimy zmienić ustawienia lokalne (statyczne metody getDefault(), setDefault() z klasy Locale umożliwiające pobranie i wstawienie ustawień lokalnych).

Do formatowania wyjścia może posłużyć klasa Formatter i jej metody format. Metoda ta jako pierwszy argument przyjmuje tekst określający sposób wyprowadzenia danych. Formatownie danych jest bardzo podobne do znanego formatowania w języku C. Następne argumenty to zmienne, których wartości będą wyprowadzane.

Metoda format() przygotowuje tekst do wyprowadzenia w zmiennej klasy StringBuilder w obiekcie klasyFormatter. Każde następne wykonanie metody format(), na rzecz tego samego obiektu, dołączy nowy tekst do wcześniej zapisanego. We wszystkich wyprowadzanych danych są uwzględnione ustawienia lokalne.

Metoda format() może być wykonana na rzecz obiektu klasy PrintWriter i System.out. W każdym wywołaniu są uwzględnione ustawienia lokalne.

Pisanie do pliku jest analogiczne do czytania z pliku. Należy utworzyć obiekt klasy PrintWriter. Jest to obiekt o nazwie out1. Jest on tworzony za pomocą konstruktora z argumentem klasy BufferedWriter() z argumentem z klasy FileWriter tworzonym za pomocą konstuktora z argumentem klasy String. Czyli kolejno:

FileWriter pom1 = new FileWriter("wyniki");

BufferedWriter pom2 = new BufferedWriter(pom1);

PrintWriter out1 = new PrintWriter(pom2);

Każdy otwarty plik powinien być zamknięty. Brak zamknięcia pliku może pozbawić, wykonującego program, części lub całości wyprowadzanych wyników.

  1. Tablice - klasa Arrays i pożyteczne metody tej klasy

Następny przykład pokaże kilka pożytecznych metod klasy Arrays. Prześledzimy poniższy przykład.

P13Tablice.java

  1. Zastosowanie metod klasy Arrays

Podstawowe operacje na tablicach takie jak: zapełnianie tablic, sortowanie, porównywanie są metoami klasy Arrays - warto się z nimi zapoznać. Są to w większości metody statyczne, a więc nie wymagają budowania obiektów klasy Arrays. W tym przykładzie poznamy kilka z nich, pozostałych jak zwykle należy szukać w dokumentacji. Przeanalizujmy przykład.

  1. Tablice dwuindeksowe, ciąg dalszy klasy Arrays

Prześledźmy poniższy programu. Program ten składa się z czterech klas.

Są to klasy: TablicaDrukuj - wyprowadzanie na standardowe wyjście tablic dwuindeksowych różnych typów, DwieFloat - klasa pomocnicza, P14Tablice - klasa o dostępności publicznej, umożliwiająca testowanie pozostałych klas.

P14Tablice.java

Opis programu


Wyszukiwarka

Podobne podstrony:
Wykład 8 treść
Wykład 4 treść
Wykład 1 treść
Wykład 6 treść
EPGMIPG mini WYKLADY tresc
Wykład 5 treść
wykład 4 Treść kształcenia
Wykład (treść biologia komórki) - biologia, I rok, II semestr, biologia komórki, Wojtek, Biologia ko
PC wyklad tresc
Wykład 2 treść
Wykład 7 treść
TRESC WYKLADU
2 Tresc zakres folia, Wykłady
fiz zagadnienia na egzamin u pekaly , TREŚĆ WYKŁADU
wykład-alg SP-treść, ZiIP Politechnika Poznańska, Badania Operacyjne
Treść programowa COWIG sem 7 OIE wykład& 11
badania fizykalne treść wykładu, Badania fizykalne
wykłady dr Springer treść wykładów najważniejsze my

więcej podobnych podstron