Programming-Java

Tasks studies - laboratory

View project on GitHub

Lab02 - Typy zmiennych i Instrukcje sterujące w języku Java

[1.] Typy zmiennych w języku Java

Java jest językiem silnie typowanym, co oznacza, że każda wartość w języku Java ma dobrze określony typ. Istnieją dwa rodzaje typów: typy obiektowe i typy proste (prymitywne). Typy obiektowe definiowane są przez klasy – i jest bez znaczenia, czy są to klasy które sami zaimplementowaliśmy, czy klasy pochodzące z jakichś bibliotek, np. bibliotek Java SE. Typy proste to typy wbudowane w język, traktowane w specyficzny sposób. Jest 8 typów prostych; są to: char, boolean, byte, short, int, long, float oraz double. Typ char reprezentuje pojedynczy znak (np. literę). Zmienne typu char mają wartości odpowiadające dowolnemu znakowi kodowania UTF-16. Typ boolean reprezentuje wartość typu logicznego. Zmienna typu boolean może przyjmować jedną z dwu wartości: true albo false. Pozostałe typy proste to typy numeryczne. Typy: byte, short, int i long to typy całkowitoliczbowe tj. typy reprezentujące liczby całkowite. Zmienna typu byte może przyjmować wartości z zakresu od -128 do 127. Zmienna typu short z zakresu od -32768 do 32767, typu int z zakresu od -2147483648 do 2147483647 a typu long z zakresu od -9223372036854775808 do 9223372036854775807. Typy float oraz double reprezentują liczby zmiennoprzecinkowe. Typ float reprezentuje wartości pojedynczej precyzji a typ double liczby podwójnej precyzji. Bodaj najpopularniejszym typem obiektowym obok typu Object jest typ String. Jest to typ reprezentujący ciąg znaków.

Przykład:

String a=”Typ łańcuchowy”;

Pewnym specyficznym rodzajem typu obiektowego jest tablica. Typ tablicowy to typ definiujący sekwencję elementów pewnego ustalonego typu. Typ tablicowy oznaczamy umieszczając nawiasy kwadratowe za typem elementów tablicy. Przykładowo, typ tablicowy elementów typu int to int[] a elementów typu String to String[].

Przykład:

int[] vector;
int[] preinitializedVector = new int[] { 1, 2, 3, 4 };
int[][] twoDimMatrix = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } };
String[] arrayName = {"Ala", "Ela", "Ula", "Ola"};

[2.] Konstrukcja wyrażeń warunkowych w języku JAVA

2.1 Instrukcja warunkowa if

if( warunek ) {
  kod wykonywany warunkowo
}

2.2 Instrukcja warunkowa if-else

if( warunek ) {
  kod wykonywany warunkowo
} else {
  kod wykonywany alternatywnie
}

Przykład:

void isPositive(int x) {
  if( x > 0 ) {
    System.out.println("liczba " + x + " jest dodatnia");
    } else {
        System.out.println("liczba " + x + " jest ujemna");
    }
}

2.3 Rozbudowana instrukcja warunkowa else-if

if( warunek ) {
  kod wykonywany warunkowo
  } else if ( warunek_drugi ) {
      kod wykonywany gdy spełniony jest drugi warunek
    } else {
        kod wykonywany alternatywnie
 }

Przykład:

void isPositive(int x) {
if( x > 0 ) {
  System.out.println("liczba " + x + " jest dodatnia");
  } else if( x == 0 ) {
      System.out.println("liczba " + x + " jest równa zero");
    } else {
        System.out.println("liczba " + x + " jest ujemna");
     }
}

2.4 Konstrukcja warunkowa – operator trójargumentowy warunek ? wartość pierwsza : wartość druga

Przykład: Kod:

public String isEven(int x) {
  if(x % 2 == 0)
    return "parzysta";
    else
      return "nieparzysta";
}

jest równoważny kodowi

public String isEven(int x) {
  return x % 2 == 0 ? "parzysta" : "nieparzysta";
}

2.5 Instrukcja wielokrotnego wyboru

switch (wyrażenie wyboru) {
case wartość_wyboru:
ciąg instrukcji dla danego wariantu
case inna_wartość_wyboru:
ciąg instrukcji dla danego wariantu
default:
ciąg instrukcji dla wariantu domyślnego
}

Przykład:

public void oddOrEven(int x) {
switch (x % 2) {
case 0:
System.out.println(x + " jest liczbą parzystą");
break;
case 1:
System.out.println(x + " jest liczbą nieparzystą");
break;
default:
System.out.println("nieprzewidziana sytuacja");
}
}

gdzie polecenie brak oznacza, że po spełnieniu warunku i wejściu do danego bloku case, pozostałe bloki nie będą już sprawdzane, zatem kod zawarty w nich na pewno się nie wykona.

[3.] Konstrukcje pętli

3.1 Pętla while

while( {warunek_pętli} ) {
ciało pętli
}

Przykład:

public void lowerThan(int num) {
int x = 0;
while( x < num ) {
  System.out.println(x);
  x = x + 1;
  }
}

Uwaga: Pętla while może nie wykonać kodu w niej zawartego ani raz jeśli warunek początkowy (pierwszy warunek sprawdzany przez pętle nie jest spełniony).

3.2 Pętla do-while

do {
  ciało pętli
} while ( warunek_pętli );

Przykład:

public void lowerThan(int num) {
  int x = 0;
  while( x < num ) {
    System.out.println(x);
    x = x + 1;
  }
}

Uwaga: Pętla do-while wykona się przynajmniej raz, gdyż warunek sprawdzany jest po wykonaniu ciała pętli.

3.2 Pętla iteracyjna for

for(deklaracje_zmiennych; warunek_pętli; instrukcje_inkrementacji) {
  ciało pętli
}

Przykład:

public void lowerThan(int num) {
for( int x = 0 ; x < num ; x++ ) // x++ to x=x+1
  System.out.println(x);
}
public void decrementValue(int num) {
for( int x = num ; x >= 0 ; x-- ) // x-- to x=x-1
  System.out.println(x);
}

Uwaga: Pętla for podobnie jak pętla while może nie wykonać kodu w niej zawartego ani raz jeśli warunek początkowy (pierwszy warunek sprawdzany przez pętle nie jest spełniony). Dodatkowo:

for( ; warunek pętli ; ) {
  ciało pętli
}

jest odpowiednikiem pętli:

while( {warunek pętli} ) {
ciało pętli
}

3.2 Pętla iteracyjna for-each Pętla używana do poruszania się po tablicach i kolekcjach danych.

for (deklaracja_zmiennej_pętli : kolekcja lub tablica) {
  ciało pętli
}

Przykład:

int[] myArray = { 1, 3, 5, 7, 11 };
for (int arrayElem : myArray) {
  System.out.print(arrayElem + " ");
}

3.3 Instrukcje brak i continue Instrukcja BREAK służy do natychmiastowego przerwania wykonania pętli lub ciągu instrukcji w instrukcji wyboru SWITCH. Wykonanie instrukcji BREAK powoduje skok do pierwszej instrukcji za przerwaną pętlą czy instrukcją wyboru. Instrukcja ta jest zazwyczaj stosowana do przerwania wykonania w instrukcji wyboru SWITCH o której piszę w kolejnym artykule. Użycie w innym celu jest niezalecane i raczej dość rzadko spotykane. Instrukcja CONTINUE może być użyta wewnątrz pętli i służy do przerwania wykonania danej iteracji pętli - tylko wykonanie bieżącej iteracji jest przerwane, nie zaś wykonanie całej pętli, tak jak to ma miejsce w przypadku instrukcji BREAK. W przypadku umieszczenia instrukcji BREAK lub CONTINUE w pętli zagnieżdżonej w innej pętli mają one skutek tylko dla pętli w której bezpośrednio się znajdują, ale możliwe jest wskazanie – poprzez etykietę – pętli bardziej zewnętrznej. Przykładowo, uruchomienie programu:

public static void main(String[] args) {
outerLoop:
for (int j = 0; ; j += 100) {
  for (int i = 0; i < 5; i++) {
    if ((i + j) % 2 == 1)
      continue;
      if (j > 100)
        break outerLoop; // przerywa wykonanie także pętli zewnętrznej
        System.out.println(i + j + " jest liczbą parzystą");
      }
    }
}

skutkuje wyświetleniem sekwencji:

0 jest liczbą parzystą

2 jest liczbą parzystą

4 jest liczbą parzystą

100 jest liczbą parzystą

102 jest liczbą parzystą

104 jest liczbą parzystą

Instrukcja CONTINUE z powyższego przykładu nie została oznaczona żadną etykietą, dlatego dotyczy ona wewnętrznej pętli FOR. Instrukcja BREAK z etykietą outerLoop powoduje natomiast przerwanie wykonania obydwu pętli, jako że etykietą tą została oznaczona pętla zewnętrzna.

Zadania do wykonania w ramach konspektu:

Zadanie 1.

Napisz program obliczający wyróżnik delta i pierwiastki trójmianu kwadratowego.

Zadanie 2.

Napisz kalkulator obliczający: sumę, różnicę, iloczyn, iloraz, potęgę, pierwiastek, oraz wartości funkcji trygonometrycznych dla zadanego kąta. Użyj biblioteki Math np. Math. Sin(2.5). Proszę pamiętać, że wartości kąta podawane do funkcji mierzone są miarą łukową. Wyniki działania algorytmów wyświetlaj na konsoli. Do obsługi menu proszę użyć konstrukcji switch-case oraz pętli while.

Zadanie 3.

Napisz program umożliwiający wprowadzanie 10-ciu liczb rzeczywistych do tablicy. Następnie utwórz następujące funkcjonalności używając pętli for:

a) Wyświetlanie tablicy od pierwszego do ostatniego indeksu.

b) Wyświetlanie tablicy od ostatniego do pierwszego indeksu.

c) Wyświetlanie elementów o nieparzystych indeksach.

d) Wyświetlanie elementów o parzystych indeksach.

Wyniki działania algorytmów wyświetlaj na konsoli. Dla wyboru powyższych funkcjonalności programu utwórz odpowiednie menu. Do obsługi menu użyć rozbudowanej konstrukcji else-if oraz pętli do-while.

Zadanie 4.

Napisz program umożliwiający wprowadzanie 10-ciu liczb. Dla wprowadzonych liczb wykonaj odpowiednie algorytmy:

  • oblicz sumę elementów tablicy,

  • oblicz iloczyn elementów tablicy,

  • wyznacz wartość średnią,

  • wyznacz wartość minimalną,

  • wyznacz wartość maksymalną.

Wyniki działania algorytmów wyświetlaj na konsoli. Utwórz odpowiednie menu.

Zadanie 5.

Napisz program wyświetlający liczby od 20-0, z wyłączeniem liczb {2,6,9,15,19}. Do realizacji zadania wyłączenia użyj instrukcji continue;

Zadanie 6.

Napisz program, który w nieskończoność pyta użytkownika o liczby całkowite. Pętla nieskończona powinna się zakończyć gdy użytkownik wprowadzi liczbę mniejszą od zera. Do opuszczenia pętli nieskończonej użyj instrukcji break. Pętle nieskończoną realizuje się następującymi konstrukcjami:

while(true)
  { ciało pętli }

lub

for(;;)
  { ciało pętli }

Zadanie 7.

Napisz program umożliwiający wprowadzanie n liczb oraz sortujący te liczby metodą bąbelkową lub wstawiania. Wyniki wyświetlaj na konsoli.