1
Języki Programowania
Instrukcje. Pętle
2
wyrażenie
if-else
składnia
if
(condition)
statement1
else
statement2;
warunek
– boolean
wyrażenia
instrukcja pojedyncza
blok instrukcji
{
//example of if-else
int v=5;
int summ=0;
if(
v > 0
){
sum += v*v;
v++;
}
else
summ = 42;
}
Uwaga:
warunek jest wyrażeniem boolean i może
używać arytmetycznych i logicznych relacji
ważne jest pierszeństwo reguł
bloki powinny być zdefiniowane w
nawiasach { }
2
3
wyrażenie
if
skąłdnia
if
(condition)
action;
warunek
– boolean
działanie (action)
instrukcja pojedyncza
blok instrukcji
{
//example of if
int v=5;
int summ=0;
if(
v > 0
){
sum += v*v;
v++;
}
}
4
Zagnieżdżanie
if
można stosować kolejny if
jako działanie dla
spełnionego warunku lub dla
else
powinno się stosować
wcięcia
należy stosować nawiasy dla
wyrażenia
if
i dla
else
(które wskazują
przynależność)
{
//nested if example
boolean isLeapYear;
if
(year % 4 == 0)
if
(year % 100 != 0)
isLeapYear = false;
if
(year % 1000 == 0)
isLeapYear = true;
else
isLeapYear = false;
}
?
3
5
Porównywanie wartości zmiennoprzecinkowych
należy rzadko użyć operatora równości (
==
)
kiedy porównuje się
wartości
float
lub
double
dwie liczby zmiennoprzecinkowe są dokładnie równe wtedy kiedy
mają dokładnie taką samą reprezentację bitową
obliczenia często powodują nieznaczne różnice, które mogą być bez
znaczenia
w wielu sytuacjach można przyjąć, że dwie liczby
zmiennoprzecinkowe są "wystarczająco blisko", nawet jeśli nie są
dokładnie równe
można przyjąć następującą technikę:
gdy różnica pomiędzy tymi dwoma liczbami jest mniejsza niż wartość
tolerancji, są one uznane za równe
tolerancja może wynosić np. 0.000001
if (Math.abs(f1 - f2) < TOLERANCE)
System.out.println ("Essentially equal");
6
Porównywanie łańcuchów (
Strings)
pamiętaj: w Java ciąg znaków jest
obiektem
należy użyć metody
equals
do porównania znaków z
zachowaniem kolejności
metoda
equals
zwraca typ boolean
if (name1.
equals
(name2))
System.out.println ("Same name");
4
7
Porównywanie obiektów
operator
==
może być stosowany do obiektów – zwraca
true
jeśli dwie referencje są aliasem
metoda
equals
jest zdefiniowana dla wszystkich
obiektów, ale może być redefiniowana w klasie
String
8
Operator warunkowy
? :
Java
posiada operator warunkowy do porównania dwóch wyrażeń
jego składnia:
condition
?
expression1
:
expression2
jeśli
condition
jest true,
expression1
jest wykonywane;
jeśli
jest false, wykonywane jest
expression2
5
9
wyrażenie
switch
każdy
case
zawiera wartość oraz listę wyrażeń (instrukcji)
sprawdzane są kolejne
case
switch
(
expression
)
{
case
value1
:
statement-list1
case
value2
:
statement-list2
case
value3
:
statement-list3
case
...
}
switch
i
case
jeśli
expression
ma wartość
value2
,
następuje skok do:
10
wyrażenie
switch
c.d.
często stosujemy
break
do przerwania listy
sprawdzeń
wyrażenie
break
przenosi sterowanie na
koniec
switch
czasami jest to ważne
w wyrażeniu
switch
rezultatem musi być
typ całkowity:
int, char, byte, short
nie można stosować
boolean
,
float,
double
lub innych typów całkowitych
switch
(option)
{
case 'A':
aCount++;
break
;
case 'B':
bCount++;
break
;
case 'C':
cCount++;
break
;
}
6
11
wyrażenie
switch
c.d.
switch
ma opcjonalnie
default
case
domyślny case nie ma przypisanej wartości i używa słowa
default
jeśli żaden case nie pasuje to wykonuje się
default
public void switchExample(int digit){
switch (digit){
case 1: System.out.println("First ");
case 2: System.out.println("Second ");
case 3: System.out.println("Third ");
default
: System.out.println("Other ");
}
}
12
Pętle
repetycje
(lub
iteracje
)
pozwalają wykonywać wyrażenia wiele razy
często nazywamy je
pętlami
(
loops)
podobnie jak wyrażenia warunkowe są sterowane przez wyrażenie
typu boolean
Java
ma 3 rodzaje pąetli:
while
do
for
Programista powinien wybrać odpowiedni rodzaj pętli w zależności
od sytuacji
7
13
wyrażenie
while
int count = 1;
while
(count <= 5)
{
System.out.println (count);
count++;
}
jeśli wyrażenie w
pętli
while
ma
początkowo false to
wyrażenia w pętli nie
wykonają się
dlatego ciało pętli
while
wykona się
zero lub więcej razy
14
Obliczanie kolejnych potęg liczby 2 (
Java JDK
)
przy okazji, proszę zwrócić uwagę, jak konwertować String
args [0]
do
liczby całkowitej (
int
)
przykłady z
while
8
15
Pętle nieskończone
ciało pętli
while
w końcu musi się dać stan false
jeśli nie to mamy pętlę nieskończoną
infinite loop
,
która będzie wykonywana, dopóki użytkownik nie
przerwie programu
jest to częsty błąd logiczny
należy zawsze dokładnie sprawdzić logikę
programu, aby upewnić się, że pętle zakończą się
normalnie
Entore Buggati:
„I build cars to go, not to stop."
int count = 1;
while
(count <= 25)
{
System.out.println (count);
count = count - 1;
}
pętla będzie się wykonywać
aż nie zostanie przerwania
(Ctrl-C w DOS) lub do
momentu błędu
przepełnienia
16
Zagnieżdżanie pętli
Ile razy wystąpi string
"Here”
?
count1 = 1;
while
(count1 <= 10)
{
count2 = 1;
while
(count2 <= 20)
{
System.out.println ("Here");
count2++;
}
count1++;
}
odpowiedź: 10 * 20 = 200 razy
9
17
Pętle zagnieżdżone
przykład: liczby Pitagorasa
liczby(a, b, c) spełniające regułę: a
2
+b
2
=c
2
zadanie: podać wszystkie liczby Pitagorasa
dla a, b
100
class
Pitagoras{
static
void
allTriples(
int
n){
for (
int
a=1; a <= n; a++)
for (
int
b = a; b <= n; b++){
int
c = intSqrt(a*a+b*b);
if (a*a+b*b == c*c)
System.out.println(”(”+a+”,”+b+”,”+c+”)”);
}
}
static
int
intSqrt(
int
n){
return (
int
)(Math.sqrt(n));
}
}
18
wyrażenie
do
do
{
statement
;
}
while
(
condition
)
wyrażenie jest wykonywane raz na
początku, a potem jest warunek jest
spełniony
powtarza się dopóki nie będzie
false
int count = 0;
do
{
count++;
System.out.println(count);
} while (count < 5);
10
19
wyrażenie
for
initialization
;
while
(
condition
)
{
statement1;
statement2;
...
increment
;
}
for
(
initialization
;
condition
;
increment
)
{
statement1;
statement2;
...
}
=
// for loop – example
// calculate N!
int sum = 0;
for
(int i=1; i<=N; i++)
sum+=1;
System.out.println(sum);
w inicjalizacji można
deklarować
zmienną
20
wyrażenie
for
Podobnie jak dla
while
, warunek dla
for
jest
sprawdzany przed wykonaniem ciała pętli
więc ciało pętli
for
wykona się 0 lub więcej razy
pętle
for
są odpowiednie do wykonania wyrażenia z
określoną liczbą powtórzeń
każde z wyrażeń w nagłówku pętli
for
jest oopcjonalne
initialization
condition
increment
for
(
initialization
;
condition
;
increment
)
{
...
}
11
21
przerywanie pętli
składnia:
break;
przerywa (lub przełącza) pętle
natychmiastowo
może być używane tylko dla:
while
for
do-while
lub w wyrażeniu
switch
używane, gdy chcemy wyjść z pętli
przed "normalnym" zakończeniem, np.
gdy szukany element został już
znaleziony
{// server
while(true{
acceptRequest();
if (timeOut())
break;
provideService();
}
}
22
kontynuacja pętli
składnia:
continue
–
skok na początek ciała pętli
używane aby rozpocząć następną iterację przerywając dalsze
wykonywanie ciała pętli
/** read numbers from keyboard until you get 0.
* ignore numbers < 10 or > 60
* write an average
*/
Public static void readComputeAverage(){
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println(„Please enter the number”);
int sum = 0, counter = 0;
while(true){
int n = in.nextInt();
if(n==0)
break;
//zakończenie
if(n <20 || n > 60)
continue;
//kontynuacja
sum += n;
counter++;
}
// end while
System.out.println(”Average is ” + (float)sum/counter);
}
12
23
zakończenie metody
instrukcja
return
przerywa metodę natychmiast
może zwracać wartość
metody które zwracają rezultat
muszą mieć słowo
return
return stanKonta+16;
metody bez rezultatu (np. void)
muszą mieć słowo
return
return;
„klasyczni” programiści unikają umieszczania
return
wewnątrz pętli