java2.pdf

(148 KB) Pobierz
Java-2
Podstawy programowania Ć JAVA
1. Program rozwia zuja cy rownanie kwadratowe
(zmienne podstawowe, operatory, instrukcje)
C wiczenie 2
public class Rownaniekwadratowe {
public static void main (String args[]) {
int a=1, b, c;
b=-6;
c=9;
System.out.println("Rownanie kwadratowe Axx+Bx+C=0\n\n");
System.out.println("Parametry rownania:\n");
System.out.println("A: "+a+" B: "+b+" C: "+c+"\n");
if (a==0) {
System.out.println("To nie jest rownanie kwadratowe: A=0!");
}
else {
double delta = b*b-4*a*c;
if (delta<0) {
System.out.println("delta<0\n");
System.out.println("Brak rozwiazania w zbiorze liczb
rzeczywistych");
}
else {
double wynik;
if (delta==0) {
wynik= -b/2*a;
System.out.println("Rozwiazanie: x = "+wynik);
}
else {
wynik=(-b+Math.sqrt(delta))/2*a;
System.out.print("Rozwiazanie: x1 = "+wynik);
wynik=(-b-Math.sqrt(delta))/2*a;
System.out.println(" ,x2 = "+wynik);
}
}
}
}
}
Ax o parametrach podanych bezpo srednio w kodzie programu ( Rownaniekwadratowe.java ).
Przedstawiono w nim m.in. sposob uzywania podstawowych typow zmiennych (deklaracje , inicjowanie oraz
wyprowadzanie wartosci na ekran), operatorow i instrukcji warunkowej ifś else .
Uwagi:
Zmienne
• Typy zmiennych w Javie dziela sie na dwa rodzaje: typy podstawowe (Tabela 1) oraz typy odnosnikowe .
Typy podstawowe dziela sie na typy arytmetyczne oraz typ logiczny . Typy arytmetyczne dziela sie z kolei na
typy caćkowitoliczbowe oraz typy zmiennoprzecinkowe . Typy odnosnikowe ( referencyjne ) dziela sie na trzy
rodzaje: typy klasowe, typy interfejsowe oraz typy tablicowe.
+
Bx
+
C
=
2
Powyzszy program jest klasycznym przykśadem obliczania pierwiastkow rownania kwadratowego
0
Typ
Liczba
bajtow
Zakres wartosci
Wartosc
standartowa
Logiczny
boolean
1
true, false
false
char
2
Znaki Unicode
\u0000
Caśkowito-
liczbowy
byte
1
-2 7 ń 2 7 -1
0
short
2
-2 15 ń 2 15 -1
0
int
4
-2 31 ń 2 31 -1
0
long
8
-2 63 ń 2 63 -1
0
Zmienno-
przecinkowy double
float
4
–3,4￿10 38
0.0
8
–1,8￿10 308
0.0
Tabela 1. Typy podstawowe zmiennych w Javie
• Aby moc uzyc jakiejs zmiennej podstawowej w programie, wpierw trzeba ja zadeklarowac . Ogolna
deklaracja ma postac : Typ_zmiennej nazwa_zmiennej;
• Mozna rowniez zadeklarowac wiele zmiennych danego typu oddzielaja c ich nazwy przecinkami. Wartosci
zmiennych mozna przypisac juz podczas deklaracji.
Typ_zmiennej nazwa1 = wartosc1, nazwa2, nazwa3 = wartosc2;
• Nazwy zmiennych moga skśadac sie z duzych i maśych liter oraz cyfr, ale nie moga zaczynac sie od cyfry.
Nie nalezy rowniez stosowac polskich znakow diakrytycznych. Zaleca sie aby nazwy zmiennych zaczynaśy
sie od maśej litery, a pierwsze litery kolejnych wyrazow byśy wielkie np. zmiennaBufor, stawkaVat,
liczbaDni.
• Zmienne w Javie, podobnie jak w C, czy C++ mozna deklarowac w dowolnym miejscu funkcji czy metody.
• W przeciwienstwie do C++ w Javie dokśadnie okreslono sposob reprezentacji danych, niezaleznie od
systemu operacyjnego (Tabela 1, Liczba bajtow).
• Do wyswietlania danych wykorzystuje sie metody System.out.print() oraz System.out.println() , ktore jako
argumenty przyjmuja rozne typy danych (mozna je śa czyc operatorem ”+—). Druga metoda wymusza
dodatkowo przejscie do nowej linii, zas pierwsza nie.
Operatory
• Do wykonywania operacji na zmiennych sśuza operatory, ktore dzielimy na: arytmetyczne, bitowe, logiczne,
przypisania, porownania.
• Do operatorow arytmetycznych zalicza sie : dodawanie (+), odejmowanie (-), mnoz enie (*), dzielenie (/),
dzielenie modulo (%), inkrementacje (++) i dekrementacje (--). Operatory inkrementacji i dekrementacji
moga wyste powac w formie przyrostowej x++, xź bad– przedrostkowej ++x, --x. Operator przyrostowy
zmienia wartosc zmiennej po jej wykorzystaniu, natomiast przedrostkowy przed jej wykorzystaniem!
• Do operatorow bitowych zalicza sie AND (&), OR (|), XOR (^), przesunie cie bitowe w lewo (<<), w prawo
(>>) oraz w prawo z wypeśnieniem zerami (>>>).
• W grupie operatorow logicznych wyroznia sie : operator logiczny AND (&&), logiczne OR (||) i logiczna
negacje (!). Argumentami operacji takiego typu musza byc wyrazenia posiadaja ce wartosc logiczna true lub
false .
• Operatory przypisania sa dwuargumentowe i powoduja przypisanie wartosci argumentu prawostronnego do
argumentu lewostronnego (Tabela 2).
• Operatory poro wnania sśuza do porownania wartosci argumentow. Wynikiem porownania jest wartosc true
lub false. Rozroznia sie argumenty: ”==—, ”!=—, ”<—, ”>—, ”>=—, ”<+—.
• Operator warunkowy ”?—, ma skśadnie :
warunek ? wartosc1 : wartosc2;
Wyrazenie takie przybiera wartosc1 , jezeli warunek jest speśniony, lub wartosc2 w przeciwnym przypadku
np. y = (x ==1? 12 : 24); da y = 12 gdy x =1 b a d– y = 24 gdy x „ 1.
Instrukcja warunkowa if...else
• Instrukcja warunkowa if...else ma ogolna postac :
if ( wyraz enie warunkowe) {
Instukcje do wykonania, jez eli warunek jest spećniony
}
else {
Instukcje do wykonania, jez eli warunek nie jest spećniony
}
Wyrazenie warunkowe, inaczej niz w C/C++ musi dac w wyniku wartosc typu boolean.
Argument 1 Operator Argument 2 Znaczenie
x = y x=y
x += y x=x+y
x -= y x=x-y
x *= y x=x*y
x /= y x=x/y
x %= y x=x%y
x <<= y x=x<<y
x >>= y x=x>>y
x >>>= y x=x>>>y
x &= y x=x&y
x |= y x=x|y
x ^= y x=x^y
Tabela 2. Operatory przypisania i ich znaczenie w Javie
Funkcje matematyczne
• Funkcje matematyczne Javy sa zawarte w klasie Math . Funkcje te sa zadeklarowane jako statyczne, wie c
mozna uzyskac do nich doste p bez tworzenia egzemplarza obiektu np. y=Math.exp(x), y=Math.sqrt(z ).
Zadania do samodzielnego wykonania:
1. Napisac program do obliczania pierwiastkow rownania kwadratowego
Ax
2
+
Bx
+
C
=
0
o
parametrach podanych bezposrednio w kodzie programu z wykorzystaniem okna graficznego.
2. Napisac program wykonuja cy dzielenie zmiennych typu caśkowitego. Sprawdzic rezultaty w sytuacji,
gdy rzeczywisty wynik jest uśamkiem.
3. Napisac program z zadeklarowana zmienna typu caśkowitego i sprawdzic przekroczenie dopuszczalnej
wartosci tej zmiennej:
a) podczas inicjacji;
b) wykonuja c operacje arytmetyczna
4. Przeanalizowac ponizszy kod nie uruchamiaja c programu (IncDec.java).
public class IncDec {
public static void main (String args[]) {
int x=1,y;
System.out.println(++x);
System.out.println(x++);
System.out.println(x);
y=x++;
System.out.println(y);
y=++x;
System.out.println(++y);
x=y;
System.out.println(--x);
System.out.println(x--);
System.out.println(x);
y=x--;
System.out.println(y);
y=--x;
System.out.println(--y);
}
}
2. Program obliczaja cy wartosc srednia
(instrukcje, tablice)
i mport java.io.*;
class Srednia {
public static double czytaj ( int k) {
String input = "";
boolean error;
double bufor=0;
BufferedReader in = new BufferedReader ( new InputStreamReader(System.in));
do {
error = false ;
System.out.print ("Podaj tablica["+k+"]: ");
System.out.flush();
try {
input = in.readLine();
}
catch (IOException e) {
System.out.println (e);
System.out.println ("Przechwycono blad wejsciowy");
error = true ;
}
try {
bufor = Double.valueOf (input).doubleValue();
}
catch (NumberFormatException e) {
System.out.println(e);
System.out.println("zly format, jeszcze raz");
error = true ;
}
} while (error);
return (bufor);
}
public static void main (String args[]) {
int ilosc = 5;
double suma = 0;
double tablica[] = new double[ilosc];
System.out.println("Obliczanie wartosci sredniej "+ilosc+" elementow tablicy");
for (int i=0; i<ilosc; i++) {
tablica[i]= czytaj(i);
}
System.out.print("\ntablica =[");
for (int i=0; i<ilosc; i++) {
suma += tablica[i];
System.out.print (" "+tablica[i]+" ");
}
System.out.println("]");
double wynik = suma / ilosc ;
System.out.println ("Srednia liczb wynosi: "+wynik+"\n");
}
}
Powyzszy program (Srednia.java) oblicza wartosc srednia elementow tablicy, zadanych w programie.
Przedstawiono w nim m.in. technike pobierania danych z klawiatury oraz zamiane śancucha na liczbe . Dane
wprowadzane sa typu rzeczywistego ( double ).
Do pobierania danych z klawiatury stworzono metode czytaj , w ktorej uzyto klasy BufferedRaader zawieraja cej
metode readLine , ktora pobiera dane wejsciowe z obiektu BufferedReader i zwraca śancuch. W tym celu
zaimportowano klasy z pakietu java.io (tam znajduje sie BufferedReader ). W metodzie czytaj nalezaśo stworzyc
nowy obiekt BufferedReader , ktory dostarczy dane z klawiatury. W tym celu wywośano konstruktor
BufferedReade r z argumentem System.in (standardowe wejscie). Aby przeczytac dane wymuszono oproznienie
bufora wejsciowego metda System.out.flush . Metoda readLine moze zgśosic wyja tek IOException (wejscia-
wyjscia), wie c uzyto pe tli do-while z blokiem try-catch , aby go przechwycic . Metoda readLine zwraca śancuch.
ktory jest przypisany zmiennej input typu String .
Kolejnym etapem jest przeksztaścenie śancucha w liczbe Ż w tym przypadku double . Konwersje przeprowadza
sie metoda valueOf , zawartej w klasie Double . Klasa ta pozwala na umieszczenie typu podstawowego w
obiekcie. Obiekt Double zawiera tylko jedno pole typu double . Klasa ta zawiera takze kilka metod do
przeksztaścania obiektow Double w typ String . Jak wspomniano wartosc zmiennej input przeksztaścana jest w
typ double za pomoca metody Double.valueOf(String).doubleValue(). Metoda ta moze zgśosic wyja tek
NumberFormatException , jesli śancuch wejsciowy jest –le sformatowany. Dzie ki zastosowaniu pe tli do-while z
blokiem try-catch wyja tek ten jest przechwytywany.
Uwagi:
Zmienne odnosnikowe.
• Zmienne typow odnosnikowych (referencyjnych) deklaruje sie jak w przypadku zmiennych typow
podstawowych:
Typ_zmiennej nazwa_zmiennej1, nazwa_zmiennej2;
Pisza c w ten sposob deklaruje sie jedynie odniesienie do zmiennej obiektowej, a nie sama zmienna !
Takiemu odniesieniu przypisana jest wartosc pusta (null). W zwia zku z tym nie mozna jej wykorzystac w
zadnej operacji. Dopiero po utworzeniu odpowiedniego obiektu w pamie ci mozna powia zac go z tak
zadeklarowana zmienna . Jesli deklaruje sie zmienna typu caśkowitego: int a ; mozna jej przypisac wartosc
np. 10. Z eby moc skorzystac z tablicy nalezy zadeklarowac zmienna odnosnikowa typu tablicowego,
utworzyc nowy obiekt tablicy i powia zac go za zmienna . Dopiero wtedy mozna swobodnie odwośywac sie
do kolejnych elementow. Pisza c: i nt tablica[]; deklaruje sie odniesienie do tablicy, ktora be dzie zawieraśa
elementy typu np . int . Samej tablicy jednak wcale jeszcze nie ma. Aby stworzyc nowa , jednowymiarowa
tablice liczb typu int o rozmiarze np. 10 elementow i przypisac ja zmiennej odnosnikowej o nazwie tablica
nalezy uzyc wyrazenie:
int tablica = new int[10];
Po tej deklaracji mozna sie odwośywac do kolejnych elementow tej tablicy:
tablica [index]
• Elementy tablicy sa numerowane od zera, a nie od 1!. Oznacza to, ze pierwszy element tablicy n-
elementowej ma indeks 0, a ostatni (n-1).
• Rozmiar tablicy moze byc ustalony dynamicznie w fazie wykonywania programu
• Zawsze mozna uzyskac informacje o rozmiarze (liczbie elementow) za pomoca odwośania tablica.length;
• Deklaruja c: Button b;
Zmiennej b przypisujemy odniesienie (referencj e ) do obiektu typu Button, ale zmienna nie wskazuje na
razie na zaden obiekt. Dopiero uzycie wyrazenia new :
b = new Button();
tworzy obiekt, a zwrocona przez new referencja jest podstawiana za zmienn a b.
W deklaracjach zmiennych typu odnosnikowego mozna inicjowac dane, np.:
int tablica[] = new int[100];
Button b = new Button;
Button[] btab = new Button[n]
String s = ” ala ma kotaą;
Ostatni przykśad pokazuje, ze w Javie dopuszczalne sa literaśy śancuchowe, ktorych uzycie powoduje
zbudowanie obiektu typu String i zwrot referencji do niego. Zmienna s zostaje zainicjowana referencja do
automatycznie utworzonego obiektu typu String , ktory zawiera napis ”ala ma kota—;
Zgłoś jeśli naruszono regulamin