background image
background image

Idź do

• Spis treści
• Przykładowy rozdział

• Katalog online

• Dodaj do koszyka

• Zamów cennik

• Zamów informacje

o nowościach

• Fragmenty książek

online

Helion SA
ul. Kościuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl

© Helion 1991–2011

Katalog książek

Twój koszyk

Cennik i informacje

Czytelnia

Kontakt

• Zamów drukowany

katalog

Java. Zadania
z programowania
z przykładowymi
rozwiązaniami

Autor: Mirosław Kubiak
ISBN: 978-83-246-2944-2
Format: 140×208, stron: 112

Java w analizie konkretnych przykładów

• Proste operacje wejścia/wyjścia
• Tablice oraz iteracje
• Programowanie obiektowe i pliki tekstowe

Java to jeden z najważniejszych używanych obecnie obiektowych języków programowania. Do 
jego największych zalet należą łatwe przenoszenie programów między platformami i możliwość 
stosowania na urządzeniach przenośnych. Dobry programista, student lub nauczyciel informatyki, 
a także każdy człowiek zainteresowany programowaniem powinien znać podstawy tego języka
i posiadać umiejętność rozwiązywania konkretnych problemów. Podobnie zresztą powinien 
opanować najważniejsze zagadnienia dotyczące programowania w językach C++ i Turbo Pascal – 
i stosować je w praktyce. Trzyczęściowy zbiór, w którym zamieszczono te same lub bardzo 
zbliżone zadania wraz z rozwiązaniami w każdym z wyżej wymienionych języków, pozwala 
sprawdzić i uzupełnić wiedzę poprzez analizę podanego kodu.

Książka „Java. Zadania z programowania z przykładowymi rozwiązaniami” to jedna z trzech części 
zbioru zadań programistycznych, zawierająca zadania w języku Java. Będziesz mógł dokładnie 
prześledzić, jak wyglądają w tym języku operacje wejścia/wyjścia i instrukcje warunkowe. Dowiesz 
się, do czego potrzebne są iteracje oraz w jaki sposób używa się tablic. Zobaczysz, na czym polega 
programowanie obiektowe i jak działa ono w Javie. Poznasz także zastosowania plików 
tekstowych. Taki układ książki ułatwi Ci przyswojenie sobie najważniejszych zagadnień z języka 
Java w najlepszy możliwy sposób – na prostych, konkretnych przykładach.

• Proste operacje wejścia/wyjścia
• Instrukcje warunkowe
• Iteracje
• Tablice – deklarowanie, dostęp do elementów, dwuwymiarowe
• Programowanie obiektowe
• Pliki tekstowe

Praktycznie opanuj podstawy języka Java

background image

Spis tre!ci

Od autora

5

Rozdzia" 1. Proste operacje wej!cia-wyj!cia

7

Operacje wej%cia-wyj%cia — informacje ogólne

7

Rozdzia" 2. Podejmujemy decyzje w programie

19

Instrukcje warunkowe w j7zyku Java

19

Rozdzia" 3. Iteracje

31

Iteracje — informacje ogólne

31

P7tla for

32

P7tla do ... while

33

P7tla while

33

Rozdzia" 4. Tablice

57

Deklarowanie tablic jednowymiarowych

57

Dost7p do elementów tablicy

58

Tablice dwuwymiarowe

62

Rozdzia" 5. Programowanie obiektowe

79

Programowanie obiektowe — informacje ogólne

79

Rekurencja

92

Rozdzia" 6. Pliki tekstowe

97

Pliki tekstowe — informacje ogólne

97

background image

1

Proste operacje

wej!cia-wyj!cia

W tym rozdziale zamieszczono proste zadania wraz z przyk%adowymi
rozwi&zaniami ilustruj&ce, w jaki sposób komputer komunikuje si*
z u+ytkownikiem w j*zyku Java.

Operacje wej!cia-wyj!cia
— informacje ogólne

KaQda  aplikacja  powinna  posiadaL  moQliwo%L  komunikowania  si7
z uQytkownikiem. WykorzystujHc proste przykKady, pokaQemy, w jaki
sposób program napisany w j7zyku Java komunikuje si7 z nim poprzez
standardowe operacje wej%cia-wyj%cia.

Operacje wej%cia-wyj%cia w Javie sH realizowane poprzez strumienie.
Strumie$

 jest poj7ciem abstrakcyjnym. MoQe on wysyKaL i pobieraL

informacje i jest poKHczony z fizycznym urzHdzeniem (np. klawiatura,
ekran) poprzez system wej%cia-wyj%cia. W j7zyku tym zdefiniowano
dwa typy strumieni: bajtowe i znakowe. Standardowy strumieF wyj-
%ciowy w Javie jest reprezentowany przez obiekt

1

 

out

 znajdujHcy si7

                                                     

1

 Obiekty zostanH omówione w rozdziale 5.

background image

8

J a v a .   Z a d a n i a   z   p r o g r a m o w a n i a   z   p r z y k " a d o w y m i   r o z w i # z a n i a m i

w klasie 

System

. Jest to obiekt statyczny klasy 

PrintStream

 zawierajHcy

metody 

print()

 i 

println()

.

Metoda 

println()

 wy%wietla argumenty podane w nawiasach (), a na-

st7pnie przechodzi do poczHtku nowej linii. PewnH jej odmianH jest me-
toda 

print()

.  Jej  dziaKanie  polega  na  wy%wietlaniu  argumentów  poda-

nych w nawiasach () bez przemieszczania kursora do nowego wiersza.

Z A D A N I E

1.1

Napisz program, który oblicza pole prostokHta. Warto%ci boków

a

 i 

b

 wprowadzamy z klawiatury. W programie naleQy przyjHL,

Qe zmienne 

a

b

 oraz 

pole

 sH typu 

double

 (rzeczywistego).

Przyk%adowe rozwi&zanie — listing 1.1

package zadanie11; // Zadanie 1.1
import java.io.*;

public class Main
{
   public static void main(String[] args)
      throws IOException
   {
      double a, b, pole;

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

      System.out.println("Program oblicza pole prostokKta.");
      System.out.println("Podaj bok a.");
      a = Double.parseDouble(br.readLine());
      System.out.println("Podaj bok b.");
      b = Double.parseDouble(br.readLine());
      pole = a*b;

      System.out.print("Pole prostokKta o boku a = " + a + "
       i boku b = " + b);
      System.out.println(" wynosi " + pole + ".");
   }
}

Klasy w Javie grupowane sH w jednostki zwane pakietami (ang. packa-
ge
). Pakiet to zestaw powiHzanych ze sobH tematycznie klas. Do jego
utworzenia sKuQy sKowo kluczowe 

package

, po którym nast7puje nazwa

pakietu zakoFczona %rednikiem, co ilustruje linijka kodu poniQej:

background image

R o z d z i a "   1 .   •   P r o s t e   o p e r a c j e   w e j ! c i a - w y j ! c i a

9

package zadanie11; // Zadanie 1.1

2

Linijka kodu

double a, b, pole;

umoQliwia  deklaracj7  zmiennych 

a

b

  i 

pole

  (wszystkie  sH  typu  rze-

czywistego — 

double

) w programie. Instrukcja

System.out.println("Program oblicza pole prostokKta.");

wy%wietla  na  ekranie  komputera  komunikat  Program  oblicza  pole
prostok&ta
.

W celu czytania z klawiatury liter i cyfr naleQy skorzystaL z dwóch
klas: 

InputStreamReader

 oraz 

BufferedReader

. Najpierw tworzymy nowy

obiekt klasy 

InputStreamReader

, przekazujHc jej konstruktorowi obiekt

System.in

.  MoQna  go  nast7pnie  wykorzystaL  w  konstruktorze  klasy

BufferedReader

. Tak opisana konstrukcja ma nast7pujHcy zapis:

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

PowstaKy obiekt klasy 

BufferedReader

 moQemy przypisaL do zmiennej

referencyjnej 

br

 i dalej, poprzez metod7 

readLine()

, moQemy wykorzy-

staL  go  do  wczytywania  zmiennej 

a

  typu 

double

  ze  strumienia  wej-

%ciowego. Ilustruje to nast7pujHca linijka kodu:

a = Double.parseDouble(br.readLine());

Wczytywanie  liczb  odbywa  si7  tak  samo  jak  wczytywanie  tekstu,
musimy jednak dokonaL odpowiedniej konwersji, tzn. zamiany ciHgu
znaków na odpowiadajHcH mu warto%L liczbowH. SKuQy do tego jedna
z poniQszych metod statycznych:

 

 

parseByte

 z klasy 

Byte

 do odczytu bajtów,

 

 

parseDouble

 z klasy 

Double

 do odczytu liczb typu 

double

,

 

 

parseFloat

 z klasy 

Float

 do odczytu liczb typu 

float

,

 

 

parseInt

 z klasy 

Int

 do odczytu liczb typu 

int

,

 

 

parseLong

 z klasy 

Long

 do odczytu liczb typu 

long

.

Aby nasz program mógK zostaL skompilowany, musimy do niego do-
daL nast7pujHce dwie linijki kodu:

import java.io.*;

                                                     

2

 Komentarze w programie oznaczamy dwoma uko%nikami //// to jest komentarz.

background image

1 0

J a v a .   Z a d a n i a   z   p r o g r a m o w a n i a   z   p r z y k " a d o w y m i   r o z w i # z a n i a m i

oraz

throws IOException

SH one niezb7dne do obsKugi bK7dów wej%cia-wyj%cia. SKowo kluczowe

import

 oznacza, Qe do programu zaimportowano wszystkie (po kropce 

*

)

pakiety java.io.

Pole prostokHta zostaje obliczone w instrukcji

pole = a*b;

Za  wy%wietlenie  warto%ci  zmiennych 

a

  i 

b

  oraz 

pole

  wraz  z  odpo-

wiednim opisem sH odpowiedzialne nast7pujHce linijki kodu:

System.out.print("Pole prostokKta o boku a = " + a + " i boku b = " + b);
System.out.println(" wynosi " + pole + ".");

Rezultat dziaKania programu moQna zobaczyL na rysunku 1.1.

Program oblicza pole prostok!ta.

Podaj bok a.

1

Podaj bok b.

2

Pole prostok!ta o boku a = 1.0 i boku b = 2.0 wynosi 2.0.

Rysunek 1.1.

 Efekt dzia%ania programu Zadanie 1.1

Z A D A N I E

1.2

Napisz program, który wy%wietla na ekranie komputera warto%L
predefiniowanej staKej   = 3,14… NaleQy przyjHL format wy%wie-
tlania tej staKej z dokKadno%ciH do pi7ciu miejsc po przecinku.

Wskazówka

J zyk Java umo"liwia formatowanie wy#wietlanych danych w podobny
sposób jak w j zyku C. S$u"y do tego metoda printf. Jej sk$adnia jest
nast puj%ca:

String format;
System.out.printf(format, arg_1arg_2, ..., arg_n); 

.

background image

R o z d z i a "   1 .   •   P r o s t e   o p e r a c j e   w e j ! c i a - w y j ! c i a

1 1

Przyk%adowe rozwi&zanie — listing 1.2

package zadanie12; // Zadanie 1.2

public class Main
{
  public static void main(String[] args)
    {
        System.out.println("Program wyRwietla liczbS pi z zadanK
         dokTadnoRciK.");
        System.out.printf("Pi = " + "%6.5f\n", Math.PI);
    }
}

Specyfikatory typów mogH byL nast7pujHce:

 

 

%d

 — 

integer

,

 

 

%e

 — 

double

,

 

 

%f

 — 

float

.

Pomi7dzy znakiem % i literH przyporzHdkowanH danemu typowi moQna
okre%liL ilo%L pól, na których ma zostaL wy%wietlona liczba, np.:

%7.2f

 — oznacza przyznanie siedmiu pól na liczb7 typu 

float

,

w tym dwóch pól na jej cz7%L uKamkowH;

%4d

 — oznacza przyznanie czterech pól na liczb7 typu caKkowitego.

W programie zapis

System.out.printf("Pi = " + "%6.5f\n", Math.PI);

powoduje, Qe na wydruk liczby  ! przeznaczonych zostaje sze%L pól,
w tym pi7L na cz7%L uKamkowH. Znak specjalny 

"...\n"

 (ang. new line)

oznacza przej%cie na poczHtek nowego wiersza. 

Math

 jest standardowH

klasH Javy, która umoQliwia obliczenia matematyczne.

Rezultat dziaKania programu moQna zobaczyL na rysunku 1.2.

Program wy"wietla liczb# pi z zadan! dok$adno"ci!.

Pi = 3,14159

Rysunek 1.2.

 Efekt dzia%ania programu Zadanie 1.2

background image

1 2

J a v a .   Z a d a n i a   z   p r o g r a m o w a n i a   z   p r z y k " a d o w y m i   r o z w i # z a n i a m i

Z A D A N I E

1.3

Napisz  program,  który  wy%wietla  na  ekranie  komputera  pier-
wiastek  kwadratowy  z  warto%ci  predefiniowanej     =  3,14…
NaleQy przyjHL format wy%wietlania pierwiastka kwadratowego
ze staKej  !z dokKadno%ciH do dwóch miejsc po przecinku.

Przyk%adowe rozwi&zanie — listing 1.3

package zadanie13; // Zadanie 1.3

public class Main
{
  public static void main(String[] args)
    {
       System.out.println("Program wyRwietla pierwiastek kwadratowy ");
       System.out.println("z liczby pi z dokTadnoRciK dwóch miejsc po
        przecinku.");
       System.out.printf("Sqrt(Pi) = " + "%2.2f\n", Math.sqrt(Math.PI));
    }
}

Metoda 

sqrt()

 pozwala na obliczenie pierwiastka kwadratowego. Jest

ona metodH standardowej klasy 

Math

.

Rezultat dziaKania programu moQna zobaczyL na rysunku 1.3.

Program wy"wietla pierwiastek kwadratowy

z liczby pi z dok$adno"ci! dwóch miejsc po przecinku.

Sqrt(Pi) = 1,77

Rysunek 1.3.

 Efekt dzia%ania programu Zadanie 1.3

Z A D A N I E

1.4

Napisz  program,  który  oblicza  obj7to%L  kuli  o  promieniu 

r

.

Warto%L promienia wprowadzamy z klawiatury. W programie
naleQy przyjHL, Qe zmienne: promieF 

r

 i 

objetosc

, sH typu 

double

(rzeczywistego).  Dla  tych  zmiennych  naleQy  przyjHL  format
wy%wietlania na ekranie z dokKadno%ciH do dwóch miejsc po
przecinku.

background image

R o z d z i a "   1 .   •   P r o s t e   o p e r a c j e   w e j ! c i a - w y j ! c i a

1 3

Przyk%adowe rozwi&zanie — listing 1.4

package zadanie14; // Zadanie 1.4
import java.io.*;

public class Main
{
  public static void main(String[] args)
    throws IOException
    {
        double r, objetosc;

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

        System.out.println("Program oblicza objStoR^ kuli.");
        System.out.println("Podaj promie_ r.");
        r = Double.parseDouble(br.readLine());

        objetosc = 4.0*Math.PI*r*r*r/3;

        System.out.print("ObjStoR^ kuli o promieniu r = ");
        System.out.printf("%2.2f", r);
        System.out.print(" wynosi ");
        System.out.printf("%2.2f.", objetosc);
    }
}

Obj7to%L kuli o promieniu 

r

 oblicza nast7pujHca linijka kodu:

objetosc = 4.0*Math.PI*r*r*r/3;

gdzie pot7gowanie zamieniono na mnoQenie.

Rezultat dziaKania programu moQna zobaczyL na rysunku 1.4.

Program oblicza obj#to"5 kuli.

Podaj promie6 r.

1

Obj#to"5 kuli o promieniu r = 1,00 wynosi 4,19.

Rysunek 1.4.

 Efekt dzia%ania programu Zadanie 1.4

background image

1 4

J a v a .   Z a d a n i a   z   p r o g r a m o w a n i a   z   p r z y k " a d o w y m i   r o z w i # z a n i a m i

Z A D A N I E

1.5

Napisz program,  który  oblicza  wynik  dzielenia  caKkowitego
bez reszty dwóch liczb caKkowitych: a = 37 i b = 11.

Wskazówka

W j zyku Java w przypadku zastosowania operatora dzielenia / dla liczb
ca$kowitych reszta wyniku jest pomijana (tak samo jest w C i C++).
W Turbo Pascalu nale"y zastosowa, operator dzielenia ca$kowitego
bez reszty div.

Przyk%adowe rozwi&zanie — listing 1.5

package zadanie15; // Zadanie 1.5

public class Main
{
  public static void main(String[] args)
    {
        int a = 37;
        int b = 11;

        System.out.println("Program wyRwietla wynik dzielenia caTkowitego");
        System.out.println("bez reszty dwóch liczb caTkowitych.");
        System.out.println("Dla liczb a = " + a + ", b = " + b);
        System.out.println(a + "/" + b + " = "+ a/b + ".");
    }
}

Rezultat dziaKania programu moQna zobaczyL na rysunku 1.5.

Program wy"wietla wynik dzielenia ca$kowitego

bez reszty dwóch liczb ca$kowitych.

Dla liczb a = 37, b = 11

37/11 = 3.

Rysunek 1.5.

 Efekt dzia%ania programu Zadanie 1.5

background image

R o z d z i a "   1 .   •   P r o s t e   o p e r a c j e   w e j ! c i a - w y j ! c i a

1 5

Z A D A N I E

1.6

Napisz program, który oblicza reszt7 z dzielenia caKkowitego
dwóch liczb caKkowitych: a = 37 i b = 11.

Wskazówka

Nale"y zastosowa, operator reszty z dzielenia ca$kowitego modulo, który
oznaczamy w j zyku Java symbolem %. Podobnie jak w j zykach C i C++,
operator ten umo"liwia uzyskanie tylko reszty z dzielenia, natomiast
warto#, ca$kowita jest odrzucana.

Przyk%adowe rozwi&zanie — listing 1.6

package zadanie16; // Zadanie 1.6

public class Main
{
  public static void main(String[] args)
    {
        int a = 37;
        int b = 11;

        System.out.println("Program oblicza resztS z dzielenia
         caTkowitego");
        System.out.println("dwóch liczb caTkowitych.");
        System.out.println("Dla liczb a = " + a + ", b = " + b);
        System.out.println(a + "%" + b + " = " + a%b + ".");
    }
}

Rezultat dziaKania programu moQna zobaczyL na rysunku 1.6.

Program oblicza reszt# z dzielenia ca$kowitego

dwóch liczb ca$kowitych.

Dla liczb a = 37, b = 11

37%11 = 4.

Rysunek 1.6.

 Efekt dzia%ania programu Zadanie 1.6

background image

Czytaj dalej...

1 6

J a v a .   Z a d a n i a   z   p r o g r a m o w a n i a   z   p r z y k " a d o w y m i   r o z w i # z a n i a m i

Z A D A N I E

1.7

Napisz program, który oblicza sum7, róQnic7, iloczyn i iloraz
dla  dwóch  liczb 

x

  i 

y

  wprowadzanych  z  klawiatury.  W  pro-

gramie  naleQy  zaKoQyL,  Qe  zmienne 

x

  i 

y

  sH  typu 

float

  (rze-

czywistego). Dla zmiennych 

x

y

suma

roznica

iloczyn

 i 

iloraz

naleQy przyjHL format ich wy%wietlania na ekranie z dokKad-
no%ciH do dwóch miejsc po przecinku.

Przyk%adowe rozwi&zanie — listing 1.7

package zadanie17; // Zadanie 1.7
import java.io.*;

public class Main
{

  public static void main(String[] args)
     throws IOException
    {
        float x, y, suma, roznica,iloczyn, iloraz;

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

        System.out.println("Program oblicza sumS, róbnicS, iloczyn
         i iloraz ");
        System.out.println("dla dwóch liczb x i y wprowadzonych
         z klawiatury.");
        System.out.println("Podaj x.");
        x = Float.parseFloat(br.readLine());
        System.out.println("Podaj y.");
        y = Float.parseFloat(br.readLine());

        suma = x+y;
        roznica = x-y;
        iloczyn = x*y;
        iloraz = x/y;

        System.out.printf("Dla liczb x = " + "%2.2f",x);
        System.out.printf(" i y = " + "%2.2f",y);
        System.out.println(); // wy)wietlenie pustej linii
        System.out.printf("suma = " + "%2.2f,\n", + suma);
        System.out.printf("róbnica = " + "%2.2f,\n", + roznica);
        System.out.printf("iloczyn = " + "%2.2f,\n", + iloczyn);
        System.out.printf("iloraz = " + "%2.2f.\n", + iloraz);
    }
}