• Nie Znaleziono Wyników

Typy proste

N/A
N/A
Protected

Academic year: 2021

Share "Typy proste "

Copied!
3
0
0

Pełen tekst

(1)

Laboratorium z informatyki sem.II/ćw.2 Wydział Transportu PW 2020/21

Materiały do użytku wewnętrznego strona 1

M

ATERIAŁY POMOCNICZE DO ĆWICZENIA

2 Wczytywanie danych z klawiatury

W Javie operacje we/wy opierają się na strumieniach, czyli obiektach, z których można odczytywać dane (strumienie wejściowe) lub zapisywać do nich dane (strumienie wyjściowe). W pakiecie java.lang są zdefiniowane standardowe strumienie: System.in (zazwyczaj wejście z klawiatury) oraz System.out (zazwyczaj wyjście na monitor ekranowy).

Na poprzednich zajęciach korzystaliśmy już ze strumienia System.out oraz jego metod print(), println().

Aby odczytać dane z klawiatury należy:

▪ Utworzyć obiekt klasy InputStreamReader, czyli czytnik strumienia wejściowego powiązany ze standardowym strumieniem wejściowym przez parametr konstruktora:

new InputStreamReader(System.in)

▪ Utworzyć obiekt klasy BufferedReader (czytnik buforowany), powiązany z czytnikiem strumienia wejściowego przez parametr konstruktora:

new BufferedReader(new InputStreamReader(System.in))

▪ Zadeklarować zmienną obiektową klasy BufferedReader i przypisać do niej nowo utworzony obiekt tej klasy:

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

▪ Wykorzystać metodę readline() obiektu we klasy BufferedReader, która zwraca jedną linię tekstu

odczytanego przez czytnik InputStreamReader ze strumienia wejściowego (tu System.in, czyli z klawiatury):

line = we.readLine();

Obiekt klasy BufferedReader buforuje strumień bajtów przekazywany przez obiekt klasy InputStreamReader, pozwalając na odczytanie od razu całych wierszy tekstu (metodą readLine()) zamiast czytać znak po znaku.

Importowanie klas z innych pakietów Javy

Klasy Javy są zorganizowane w pakiety. Nazwa pakietu podana jest na początku treści pliku definiującego klasę Javy, np. package projekt2;

▪ Klasy zawarte w tym samym pakiecie mogą się do siebie wzajemnie odwoływać.

▪ Pozostałe klasy, zdefiniowane w bibliotekach Javy (a w ogólności, w pakietach innych niż ten, z którego następuje odwołanie) muszą być importowane. Klauzule importu muszą poprzedzać definicję klasy, która się do nich odwołuje, np.: import java.io.BufferedReader;

▪ Wyjątkiem jest pakiet java.lang, którego zawartość – na przykład klasa System jest standardowo dostępna dla wszystkich programów Javy. Klasa System zawiera m.in. deklaracje pól statycznych in oraz out reprezentujących standardowe wejście i wyjście z programu. Zmienna out jest obiektem klasy PrintStream (strumień wydruku) i posiada szereg metod drukowania (bądź wyświetlania na ekranie, zależnie od technicznej realizacji wyjścia standardowego). Jedną z nich jest metoda System.out.println() użyta w programie do wyświetlania wiersza tekstu podanego jako parametr.

Typy proste

▪ Obok klas obiektów, w Javie występują typy proste dla wartości liczbowych, znakowych i logicznych. Poniżej zestawiono wybrane typy proste, które wykorzystujemy w ćwiczeniach.

Nazwa typu Liczba bajtów Znaczenie-typy proste Dopuszczalne wartości

int 4 Liczby całkowite -2147483648.. 2147483647

double 8 Liczby rzeczywiste -1,8e308..1,8e308

float 4 Liczby rzeczywiste -3,4e38..3,4e38

boolean 1 Wartości logiczne true lub false

Typom prostym odpowiadają uzupełniające je klasy (typy obiektowe), które definiują szereg właściwości i metod związanych z operacjami na odpowiednich wartościach.

Jednym z prostych typów całkowitych jest typ int. Odpowiadająca mu klasa Integer definiuje m.in. metodę o nazwie

parseInt(), która konwertuje łańcuch znaków (ciąg cyfr ew. poprzedzony znakiem „-”) podany jako parametr na wartość typu int. Jednym z przykładów użycia tej metody jest następująca instrukcja:

m = Integer.parseInt(args[i]);

Typy float i double

Java udostępnia 2 typy liczbowe wykorzystywane do reprezentacji liczb rzeczywistych. Różnią się one liczbą bitów przeznaczonych na zapis danych oraz zakresem dopuszczalnych wartości. Wartości typu float(pojedynczej precyzji) zapisywane są na 32 bitach i należą do zakresu od +/-1.4*10-45 do +/-3.4*1038 . Wartości typu double (podwójnej precyzji) zapisywane są na 64 bitach i należą do zakresu od +/-4.9*10-324 do +/-1.8*10308 Aby literał rzeczywisty był typu float musi być zakończony znakiem f lub F, w przeciwnym przypadku będzie typu double, na przykład:

10.5 - wartość typu double 10.5f - wartość typu float

(2)

Laboratorium z informatyki sem.II/ćw.2 Wydział Transportu PW 2020/21

Materiały do użytku wewnętrznego strona 2

Konwersja tekstu na liczby rzeczywiste

Do przekształcania tekstów w liczby rzeczywiste stosuje się statyczną metodę parseDouble()klasy Double, np:

String t = "125.5";

double a = Double.parseDouble(t);

Przy przekształcaniu tekstów w liczby rzeczywiste pojedynczej precyzji stosuje się analogiczną metodę parseFloat ()

klasy Float, np:

float c =Float.parseFloat(t);

Przy przekształcaniu tekstu w liczbę może pojawić się błąd i metoda tworzy wtedy wyjątek klasy

NumberFormatException, dlatego należy ją wywoływać w bloku try ... catch

Konwersja liczb na łańcuchy String

▪ Do konwersji liczb na typ String służy metoda toString()

, zdefiniowana we wszystkich klasach

reprezentujących liczby. Jest ona wywoływana automatycznie, jeśli w wyrażeniu zamienianym na łańcuch występują składniki typu

String połączone operatorem + ze składnikami o wartościach liczbowych

▪ Metoda ta może być wywołana jawnie, na przykład poniższe instrukcje spowodują zamianę na łańcuchy zmiennej n typu int oraz zmiennej a typu double:

String s1 = Integer.toString(n); String s2 = Double.toString(a);

Wybrane funkcje matematyczne i stałe klasy

Math Funkcje matematyczne Javy są zawarte w klasie Math.

Metody klasy Math -zwykle operują na liczbach rzeczywistych typu double i zwracają wartości typu double. Poniżej przedstawione są wybrane metody klasy Math.

Metoda Opis

abs(double d)

Zwraca wartość bezwzględną liczby typu

double abs(int n)

Zwraca wartość bezwzględną liczby typu

int cos(double d)

Zwraca wartość funkcji cosinus

sin(double d)

Zwraca wartość funkcji sinus

tan(double d)

Zwraca wartość funkcji tangens

exp(double d)

Zwraca wartość funkcji eksponencjalnej (e do potęgi

d

)

log((double d)

Zwraca wartość logarytmu naturalnego (przy podstawie e)

log10(double d)

Zwraca wartość logarytmu przy podstawie

10 max(double a,double b)

Zwraca większą z dwóch wartości typu

double max(int k, int n)

Zwraca większą z dwóch wartości typu

int min(double a, double b)

Zwraca mniejszą z dwóch wartości typu

double min(int k, int n)

Zwraca mniejszą z dwóch wartości typu

int

pow(double a,double b)

Zwraca wartość potęgi o podstawie

a

i wykładniku

b round(double a)

Zwraca liczbę całkowitą powstałą z zaokrąglenia liczby

a

random()

Zwraca liczbę losową z przedziału

< 0, 1.0)

signum(double x) Zwraca wartość funkcji signum argumentu x:

0 - gdy argoment ma wartość 0 1.0 - gdy argument jest dodatni, -1.0 - gdy argument jest ujemny

sqrt(double x)

Zwraca pierwiastek kwadratowy z liczby

x

toDegrees(double d)

Zamienia wartość kąta w radianach na stopnie

toRadians(double d)

Zamienia wartość kąta w stopniach na radiany

Klasa Math zawiera również dwa pola z wartościami stałych stosowanych w obliczeniach matematycznych:

Nazwa pola Opis

PI

Zawiera wartość liczby pi=3,141592653589793…

E

Zawiera wartość liczby Eulera e=2.718281828459045…

(Podane wyżej wartości są najbliższym możliwym przybliżeniem odpowiednich stałych matematycznych, ze względu na skończoną dokładność przedstawienia liczb rzeczywistych w formacie zmiennoprzecinkowym typu double.)

(3)

Laboratorium z informatyki sem.II/ćw.2 Wydział Transportu PW 2020/21

Materiały do użytku wewnętrznego strona 3

Instrukcja

for

Instrukcja iteracyjna ma poniższą postać, przy czym:

for(wyr1; war; wyr2) { //instrukcje }

Przykład:

for(int i=0; i<10; i++) {

System.out.println("i = " + i);

}

gdzie: ++ operator inkrementacji ( zwiększenia wartości o 1)

Operator inkrementacji ++

Operator ++ oznacza zwiększenie wartości o jeden. Może być zastosowany w postaci przedrostkowej (prefix) np. ++i lub przyrostkowej (postfix) np. i ++. Rozróżnienie tych postaci ma znaczenie, jeśli operator jest użyty w złożonym wyrażeniu. W postaci przedrostkowej zwiększenie wartości zmiennej jest wykonywane przed wykorzystaniem tej wartości, w postaci przyrostkowej – dotychczasowa wartość zmiennej jest wykorzystana w wyrażeniu, a następnie wartość zmiennej jest zwiększana o 1.

Analogiczne znaczenie i postaci ma operator dekrementacji -- , czyli zmniejszania o 1.

Symbole specjalne

W ćwiczeniu wykorzystano następujące symbole specjalne (dwuznaki) Javy:

++ to operator inkrementacji,

+= to operator sumowania z przypisaniem (suma += i; zastępuje instrukcję suma = suma + i;);

<= to operator relacji nieostrej mniejszości.

1. jednorazowo wyliczane jest wyrażenie wyr1 (tu może pojawić się deklaracja zmiennych, wraz z inicjalizacją),

2. każdorazowo przed wejściem do (bloku) instrukcji sprawdzany jest warunek war i jeśli jego wartość jest true, wykonywane są instrukcje, w

przeciwnym przypadku następuje koniec pętli for, 3. po wykonaniu (bloku) instrukcji wyliczane jest

wyrażenie wyr2.

Cytaty

Powiązane dokumenty

The first and third authors would like to acknow- ledge the hospitality of the Centre for Research in Algebra and Number Theory during their stays at Carleton

This easily leads to examples of surfaces over a number field which do not dominate any variety of general type, but which nevertheless do not acquire Zariski-dense K-rational

For any deeply infinite effective double frame (Ψ, Φ, R) there exists an infinite family {B j : j ∈ ω} of infinite recursive subsets of Φ such that each B j is different from any R

dobri študentje/študenti – velik talent, veliki talenti. W formach mianownika liczby mnogiej rzeczowników m!skich dochodzi czasem równie&amp; do mieszania ko&#34;cówek

Wszelkie jednak dane liczbowe opierają się w tym przypadku na dalekich od doskonałości szacunkach, dokonywanych głównie przez Departament Pomocy Społecznej Ministerstwa Pracy

Nieco poszerzone badania późniejsze zawęziły ten dystans czasowy do 166-249 tysięcy (Vigilant et al. Powodem krytyki i zarazem popularności ich badań stał się wniosek,

[r]

1) In the CMSMPR-experiments with pure ammonium sulfate, chapter 4, the nucleation mechanism is surface breeding limited by a formation step proportional to the growth rate, and