background image

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

background image

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

background image

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

background image

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

background image

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

background image

* 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 pokazany został sposób sprawdzenia czy wprowadzony tekst jest zgodny z podanym

wyrażeniem regularnym:

6

background image

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


Document Outline