Programowanie obiektowe /Java/
Laboratorium nr 3
1
Tablice
1
package
pl.kielce.tu.lab3;
2
3
public class
Tabs {
4
5
public static void
main(String[] args) {
6
int
[]tab1 =
new int
[3];
7
System.out.println(
"tab1.length = "
+ tab1.length +
" tab1[0] = "
+ tab1[0]);
8
int
[]tab2 = {10, 20, 30};
9
System.out.println(
"tab2.length = "
+ tab2.length +
" tab2[0] = "
+ tab2[0]);
10
11
String tab3[] =
new
String[3];
12
System.out.println(
"tab3.length = "
+ tab3.length +
" tab3[0] = "
+ tab3[0]);
13
String tab4 [] =
"Ala ma kota"
.split(
" "
);
14
System.out.println(
"tab4.length = "
+ tab4.length +
" tab4[0] = "
+ tab4[0]);
15
16
boolean
tab5[];
17
//System.out.println("tab5.length = " + tab5.length); // Błąd
18
//tab5 = {true, false, true}; // Błąd
19
tab5 =
new boolean
[3];
20
//System.out.println("tab5[4] = " + tab5[4]); // Wyjątek
21
}
22
}
Przykład 1: src/pl/kielce/tu/lab3/Tabs.java {link}
2
Operatory
1
package
pl.kielce.tu.lab3;
2
3
import
java.util.Random;
4
5
public class
Operators {
6
7
private static void
test1() {
8
//Opertatory jednoargumentowe (-) i (+)
9
int
i = 1;
10
i += +i;
11
i -= -i;
12
System.out.println(
"i = "
+ i);
13
}
14
15
private static void
test2() {
16
//Operatory inkrementacji (++) i dekrementacji (--)
17
int
j = 0;
18
System.out.println(
"j++ = 0 "
+ (j++ == 0));
19
j = 0;
20
System.out.println(
"++j = 0 "
+ (++j == 0));
21
}
22
23
private static void
test3() {
24
//Operatory relacji <, <=, ==, != >=, >
1
25
int
i1 = 0;
26
int
i2 = 0;
27
System.out.println(
"i1 = i2 "
+ (i1 == i2));
28
29
Integer j1 =
new
Integer(0);
30
Integer j2 =
new
Integer(0);
31
System.out.println(
"j1 = j2 "
+ (j1 == j2));
32
System.out.println(
"j1.equals(j2) "
+ (j1.equals(j2)));
33
34
String s1 =
"Ala ma kota"
;
35
String s2 =
"Ala ma kota"
;
36
System.out.println(
"s1 = s2 "
+ (s1 == s2));
37
System.out.println(
"s1.equals(s2) "
+ (s1.equals(s2)));
38
39
String s3 =
new
String(
"Ala ma kota"
);
40
String s4 =
new
String(
"Ala ma kota"
);
41
System.out.println(
"s3 = s4 "
+ (s3 == s4));
42
System.out.println(
"s3.equals(s4) "
+ (s3.equals(s4)));
43
}
44
45
private static void
test4() {
46
//Operatory logiczne: &&, ||, ! (negacja)
47
int
n = 1;
48
// System.out.println("!n " + !n); //Błąd
49
System.out.println(
"true && true "
+ (
true
&&
true
));
50
System.out.println(
"true || true "
+ (
true
||
true
));
51
System.out.println(
"! true "
+ (!
true
));
52
}
53
54
private static boolean
print() {
55
return false
;
56
}
57
58
private static void
test5() {
59
//Skracanie obliczeń wyrażenia logicznego
60
System.out.println(
"Test 1 Początek"
);
61
boolean
t2 = print() &&
false
;
62
System.out.println(
"Test 1 Koniec"
);
63
System.out.println(
"Test 2 Początek"
);
64
boolean
t1 =
false
&& print();
65
System.out.println(
"Test 2 Koniec"
);
66
}
67
68
private static void
test6() {
69
//Operatory bitowe: &, |, ^, ~ (negacja)
70
int
m1 = 0x14;
71
int
m2 = 014;
72
int
m3 = 14;
73
System.out.println(
"0x14 = "
+ m1);
74
System.out.println(
" 014 = "
+ m2);
75
System.out.println(
" 14 = "
+ m3);
76
System.out.println(
"m1 & m2 = "
+ (m1 & m2));
77
System.out.println(
"m1 | m2 = "
+ (m1 | m2));
78
System.out.println(
"m1 ^ m2 = "
+ (m1 ^ m2));
79
System.out.println(
"~m1 = "
+ (~m2));
80
}
81
82
private static void
test7() {
83
//Operatory przesunięć >>, >>>, <<
84
int
s1 = 4;
85
int
s2 = -4;
86
System.out.println(
"s1 >> 1 = "
+ (s1 >> 1) +
" s2 >> 1 = "
+ (s2 >> 1));
2
87
System.out.println(
"s1 >>> 1 = "
+ (s1 >>> 1) +
" s2 >>> 1 = "
+ (s2 >>> 1));
88
System.out.println(
"s1 << 1 = "
+ (s1 << 1) +
" s2 << 1 = "
+ (s2 << 1));
89
}
90
91
private static void
test8() {
92
//Operatory trójargumentowy if-else
93
Random r =
new
Random();
// Generator liczb losowych
94
int
i = r.nextInt();
95
int
signum = i > 0 ? 1 : (i < 0 ? -1 : 0);
// Nawiasy można pominąć
96
System.out.println(
"signum "
+ i +
" = "
+ signum);
97
}
98
99
private static void
test9() {
100
//Operatory rzutowania
101
int
ci = 1;
102
long
cl = 1L;
103
// ci = cl; // Błąd
104
ci = (
int
) cl;
105
cl = ci;
106
107
float
cf = 100f;
108
double
cd = 10e2d;
109
System.out.println(
" 100.0f = "
+ cf);
110
System.out.println(
"10.0e2d = "
+ cd);
111
// cf = cd; // Błąd
112
cf = (
float
) cd;
113
cd = cf;
114
}
115
116
public static void
main(String[] args) {
117
test1();
118
test2();
119
test3();
120
test4();
121
test5();
122
test6();
123
test7();
124
test8();
125
test9();
126
}
127
}
Przykład 2: src/pl/kielce/tu/lab3/Operators.java {link}
Dla typów prostych operator relacji (== lub ! =) działa na zasadzie porównywania wartości zmiennych.
Dla obiektów operator relacji (== lub ! =) działa na zasadzie porównywania referencji. Równoważność
obiektów można sprawdzić wywołując funkcję equals().
3
Instrukcje sterujące
1
package
pl.kielce.tu.lab3;
2
3
import
java.util.Random;
4
5
public class
Instructions {
6
7
private static void
test1() {
8
//Instrukcja warunkowa if-else
9
boolean
wyrazenie_logicze =
false
;
10
if
(wyrazenie_logicze)
3
11
System.out.println(
"1) wyrazenie_logicze = true"
);
12
if
(wyrazenie_logicze);
13
System.out.println(
"2) wyrazenie_logicze = true"
);
14
if
(wyrazenie_logicze)
15
System.out.println(
"3) wyrazenie_logicze = true"
);
16
else
17
System.out.println(
"3) wyrazenie_logicze = false"
);
18
}
19
20
private static void
test2() {
21
//Instrukcja wielokrotnego wyboru switch
22
int
rokStudiow = 1;
23
switch
(rokStudiow){
24
case
1:
25
case
2:
26
case
3:
27
System.out.println(
"Studia I stopnia"
);
28
break
;
29
case
4:
30
case
5:
31
System.out.println(
"Studia II stopnia"
);
32
break
;
33
default
:
34
System.out.println(
"Pomylka"
);
35
}
36
}
37
38
private static void
test3() {
39
//Pętla while, do-while, for, "foreach", "forever"
40
int
h = 5;
41
while
(h < 3){
42
System.out.println(
"1) h = "
+ h);
43
h++;
44
}
45
46
h = 5;
47
do
{
48
System.out.println(
"2) h = "
+ h);
49
h++;
50
}
while
(h < 3);
51
52
int
g[] = {10, 20, 30};
53
for
(
int
c = 0; c < g.length; c++, c--, c++)
54
System.out.println(
"g["
+ c +
"] = "
+ g[c]);
55
56
for
(
int
x : g)
57
System.out.println(x);
58
59
//for(;;)
60
// System.out.println("Nieskończona pętla");
61
}
62
63
private static void
test4() {
64
zewnetrznaPetla:
for
(
int
v = 0; v < 10; v++){
65
wewnetrznaPetla:
for
(
int
w = 0; w < 2; w++){
66
System.out.println(
"v = "
+ v +
" w = "
+ w);
67
switch
(v){
68
case
0:
69
System.out.println(
"continue"
);
70
continue
;
71
case
1:
72
System.out.println(
"break"
);
4
73
break
;
74
case
2:
75
System.out.println(
"continue wewnetrznaPetla"
);
76
continue
wewnetrznaPetla;
77
case
3:
78
System.out.println(
"break wewnetrznaPetla"
);
79
break
wewnetrznaPetla;
80
case
5:
81
System.out.println(
"continue zewnetrznaPetla"
);
82
continue
zewnetrznaPetla;
83
case
6:
84
System.out.println(
"break zewnetrznaPetla"
);
85
break
zewnetrznaPetla;
86
}
87
}
88
}
89
}
90
91
public static void
main(String[] args) {
92
test1();
93
test2();
94
test3();
95
test4();
96
}
97
}
Przykład 3: src/pl/kielce/tu/lab3/Instructions.java {link}
Instrukcja break powoduje wyjście z bieżącej pętli. Instrukcja continue powoduje pominięcie reszty bie-
żącej pętli i rozpoczęcie kolejnej iteracji. Etykieta jest to identyfikator po którym następuje dwukropek np.
Label
:. Etykieta może wystąpić tylko przed instrukcją iteracji. Instrukcja continue Label przerywa wszyst-
kie pętle do poziomu etykiety Label. Następnie pętla poziomu etykiety Label jest kontynuowana. Instrukcja
break Label
przerywa wszystkie pętle do poziomu etykiety Label. Pętla poziomu etykiety Label także jest
przerywana.
4
Formatowanie tekstów
-
′
b
′
,
′
B
′
– jeżeli argument ma wartość null to wynikiem jest ”f alse”, jeżeli jako argument została przeka-
zana zmienna boolean lub Boolean to wynikiem jest tekst zwrócony przez String.valueOf (), w innym
przypadku wynikiem jest ”true”,
-
′
h
′
,
′
H
′
– jeżeli argument ma wartość null to wynikiem jest ”null”, w innym przypadku jest to wynik
wywołania Integer.toHexString(arg.hashCode()),
-
′
s
′
,
′
S
′
– jeżeli argument ma wartość null to wynikiem jest ”null”, jeżeli argument implementuje
F ormattable
, to dla argumentu wywoływana jest metoda f ormatT o, w innym przypadku wynikiem
jest tekst zwrócony przez arg.toString(),
-
′
c
′
,
′
C
′
– znak Unicode (*),
-
′
d
′
– liczba w formacie dziesiętnym (**),
-
′
o
′
– liczba w formacie ósemkowym (**),
-
′
x
′
,
′
X
′
– liczba w formacie szesnastkowym (**),
-
′
e
′
,
′
E
′
– liczba dziesiętna w zapisie naukowym (***),
-
′
f
′
– liczba dziesiętna (***),
-
′
n
′
– zależny od platformy znak nowej linii.
Oznaczenia:
5
* dotyczy char, Character, byte, Byte, short, Short oraz int and Integer pod warunkiem, że metoda
Character.isV alidCodeP oint
(int) zwraca true,
** dotyczy byte, Byte, short, Short, int, Integer, long, Long, oraz BigInteger,
*** dotyczy f loat, F loat, double, Double, oraz BigDecimal.
1
package
pl.kielce.tu.lab3;
2
3
public class
Formats {
4
5
public static void
main(String[] args) {
6
int
x = 123;
7
String s = String.format(
"dec %d %n"
, x);
8
s += String.format(
"oct %o %n"
, x);
9
s += String.format(
"hex %x %n"
, x);
10
System.out.print(s);
11
12
System.out.printf(
"dec %4d %n"
, x);
13
System.out.printf(
"oct %8o %n"
, x);
14
System.out.printf(
"hex %12x %n"
, x);
15
}
16
}
Przykład 4: src/pl/kielce/tu/lab3/Formats.java {link}
Szczegóły dotyczące formatowania można znaleźć:
http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html
5
Wyrażenia regularne
Klasy znaków:
[abc] – a, b, lub c,
[
∧
abc
] – wszystkie znaki poza a, b oraz c,
[a − cA − c] – znaki od a do c oraz od A do C,
[a − k&&[i − z]] – i, j oraz k (część wspólna).
Predefiniowane klasy znaków:
.
(kropka) – dowolny znak,
\d – cyfra [0 − 9],
\D – inny znak poza cyfrą [
∧
0 − 9],
\s – biały znak [\t\n\x0B\f \r],
\S – inny znak poza białym znakiem [
∧
\s],
\w – litera mała, duża lub cyfra [a − zA − Z0 − 9],
\W – inny znak poza literą mała, dużą lub cyfrą [
∧
\w],
W zmiennych typu String symbol \ musi zostać zastąpiony przez \\.
Znaki dotyczące zakotwiczenia:
∧
- początek linii,
\$ – koniec linii,
\b – granica słowa,
\B – przeciwieństwo granicy słowa.
Zachłanny kwantyfikator (ang. greedy) – dopasowuje maksymalny, możliwy fragment ciągu do wzorca.
Niechętny kwantyfikator (ang. reluctant) – dopasowuje minimalny, konieczny fragment ciągu do wzorca.
W tabeli podana jest liczba wystąpień X.
W przykładzie 5 pokazany został sposób sprawdzenia czy wprowadzony tekst jest zgodny z podanym
wyrażeniem regularnym:
6
Zachłanny
Niechętny
Raz lub wcale
X?
X??
Zero lub więcej razy
X*
X*?
Raz lub więcej razy
X+
X+?
Dokładnie n razy
X{n}
X{n}?
Co najmniej n razy
X{n,}
X{n,}?
Co najmniej n razy, ale nie więcej niż m razy
X{n,m}
X{n,m}?
1
package
pl.kielce.tu.lab3;
2
3
import
java.util.regex.Matcher;
4
import
java.util.regex.Pattern;
5
6
public class
Regs {
7
8
public static void
main(String[] args) {
9
Pattern p = Pattern.compile(
"\\d{2}-\\d{3}"
);
10
String s =
"25-900"
;
11
Matcher m = p.matcher(s);
12
System.out.println(
"Pattern ("
+ p +
" matches "
+ s +
": "
+ m.matches());
13
}
14
}
Przykład 5: src/pl/kielce/tu/lab3/Regs.java {link}
Szczegóły dotyczące wyrażeń regularnych można znaleźć:
http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
6
Przykładowa treść laboratorium
Proszę stworzyć oraz uruchomić aplikację zgodną ze specyfikacją podaną przez prowadzącego np. spraw-
dzającą czy tekst jest zgodny z podanym wyrażeniem regularnym.
7