Programming-Java

Tasks studies - laboratory

View project on GitHub

PROGRAMOWANIE OBIEKTOWE JAVA – LABORATORIUM

Narzędzia programistyczne: Eclipse vs IntelliJ
lab1

Pierwszy projekt

W celu stworzenia projektu wybieramy opcję Create New Project:
lab1

Następnie w oknie New Project konfigurujemy podstawowe ustawienia (zaznaczamy Java oraz wybieramy Project SDK):
lab1 Klikamy w przycisk Next i w ten sposób przechodzimy do kolejnego widoku. Zaznaczamy opcje tak jak na zdjęciu:
lab1 W tym momencie musimy jeszcze ustawić nazwę naszego projektu oraz jego lokalizację na dysku i możemy zakończyć cały proces przyciskiem Finish:
lab1

Uruchomienie programu

Naszym oczom powinien się ukazać widok główny IDE. Do tej pory zdjęcia wszystkich okien wstawialiśmy w ciemnym schemacie kolorystycznym. Teraz dla odmiany użyjemy jasnego motywu:
lab1

Wprowadzenie do Javy

Słowa kluczowe (Keywords):

package - Określa pakiet, a więc grupę klas i interfejsów o zbliżonym zakresie działania. Pakiet widziany z poziomu systemu operacyjnego to nic innego jak folder, a klasy i interfejsy są definiowane w plikach. Najczęściej zarówno klasa, jak i interfejs są tworzone w osobnych dedykowanych plikach (bywa, że w jednym pliku możemy mieć kilka klas i interfejsów, ale to nie jest istotne na tym etapie).

class - Klasa definiuje cechy i zachowania, które przyjmie obiekt stworzony na bazie takiej klasy. Zachowania to działania, jakie obiekt może wykonać. Najczęściej są to funkcje (w Javie mówimy metody). Natomiast cechy obiektu są przechowywane w polach klasy (fields). • interface - Interfejs definiuje zachowania, które przyjmie obiekt stworzony na bazie takiego interfejsu. W przypadku interfejsu inaczej niż w przypadku klas, metody najczęściej nie zawierają kodu wykonującego określone zadanie (zdarzają się wyjątki, ale o tym nie teraz). Metody te są projektem, a więc tworzymy tylko ich deklaracje, a to klasy później dostarczą wykonanie tego projektu. • import Używane na początku pliku z kodem. Wskazuje lokalizacje zewnętrznych pakietów i klas, których później możemy użyć w naszym kodzie. • extends - Umożliwia rozszerzanie klas i interfejsów przez podklasy i podinterfejsy. • implements - Umożliwia implementowanie interfejsów przez klasy.

Java podstawy

public class Start {
  public static void main(String[] args) {
     System.out.println("Hello!");
 }
}

Pierwsze co rzuca nam się w oczy to słowa kluczowe, takie jak public, class, static, void. Następnie widzimy, że kod posiada wydzielone bloki. Jeden z nich określa blok całej klasy, a drugi - zawierający się w tej klasie - blok metody. Możemy więc powiedzieć, że nasz pierwszy program zawiera instrukcje blokową, w której zawiera się inna instrukcja blokowa, w której definiujemy instrukcję w postaci wyrażenia (wywołującego metodę drukującą na konsoli tekst Hello!).

package com.company;
public class Main {
 public static void main(String[] args) {
   // write your code here 
   System.out.println("Hello Java");
 }
}

Linia pierwsza public class Start pozwala nam zdefiniować klasę: • Słowo public to tzw. modyfikator dostępu. Określa on widoczność elementu, przed którym jest wpisany - czyli w tym przypadku klasy. Najprościej mówiąc, public oznacza, iż do danej klasy można dostać się z każdego miejsca programu (każdego innego kawałka kodu, zlokalizowanego nawet w innym pliku, w innym pakiecie).

• Słowo class możemy opisać, jako szablon do tworzenia nowych obiektów, o określonych cechach (tzw. pola), oraz zachowaniach (tzw. metody). Obiekt utworzony na podstawie danej klasy nazywany jest jej instancją, a proces jego tworzenia - instancjonowaniem.

• Słowo Main oznacza nazwę klasy.

Druga linia public static void main(String[] args) pozwala nam zdefiniować metodę. Metoda to fragment kodu programu - pewien ciąg instrukcji, który realizuje określoną funkcję - potocznie mówiąc, realizuje pewne zadania.

• Słowo public omówiliśmy już wyżej. Modyfikator w tym wypadku co prawda odnosi się do metody, ale podlega tym samym zasadom dostępności jak w przypadku klasy.

• Słowo static mówi nam, że metoda jest statyczna. Metody statyczne różnią się od zwykłych metod tym, że do ich wywołania nie potrzebujemy instancji klasy. Taką metodę możemy wywołać bezpośrednio, odwołując się do klasy.

• Słowo void mówi nam jaki typ jest zwracany przez metodę. Konkretne słowo void oznacza, że metoda niczego nie zwraca (żadnej instancji obiektu lub wartości, na przykład liczbowej).

• Słowo main oznacza nazwę metody. Publiczna metoda statyczna o nazwie main z dokładnie tak określonymi parametrami (String[] args) jest zarezerwowana dla metody uruchamiającej program.

• Określenie (String[] args) oznacza parametr metody. W tym dokładnie przypadku jest to zbiór argumentów. String to nazwa klasy, jakiej używamy do reprezentacji ciągu znaków, natomiast args oznacza po prostu nazwę parametru. Zagadkowy znak [] oznacza tablicę. Bardziej szczegółowo temat tablic omówimy na dalszym etapie kursu. Na tym etapie warto podkreślić, że wszystkie argumenty, jakie chcemy przekazać do programu z zewnątrz, są przekazywane właśnie tą drogą.

Trzecia linia System.out.println("Hello Java") jest odpowiedzialna za wyświetlenie na ekranie ciągu znaków, jakim jest “Hello Java”. • Słowo System samo w sobie oznacza nazwę klasy.

• Słowo out oznacza pole klasy System.

• Słowo println oznacza nazwę metody, zdefiniowanej w klasie System, która jest odpowiedzialna za wyświetlanie danych na ekranie (a dokładniej na konsoli).

• Określenie Hello Java to ciąg znaków, jaki chcemy wyświetlić na ekranie.

Uruchomienie programu

Program można uruchomić poprzez zakładkę Run -> Run Main (Shift+F10) (1) lub klikając na zieloną strzałkę po w prawym górnym rogu projektu (2).
lab1

Typy proste

Java jest językiem silnie ukierunkowanym na programowanie obiektowe, ale zawiera również typy proste. Typy proste mogą być używane zarówno w polach klas jak i jako zwykłe zmienne w metodach. Do typów prostych należą: char, boolean, byte, short, int, long, float oraz double.

Przykład:

package com.company;
public class Main {
 public static void main(String[] args) {
   // write your code here 
   System.out.println("Hello Java");
   char itemFirstCharacter = 'i';
   System.out.println(itemFirstCharacter);
   boolean enabled = true;
   System.out.println(enabled);
   byte itemsNumberByte = 7;
   System.out.println(itemsNumberByte);
   short itemsNumberShort = 400;
   System.out.println(itemsNumberShort);
   int itemsNumberInt = 53000;
   System.out.println(itemsNumberInt);
   long itemsNumberLong = 72036854775807l;
   System.out.println(itemsNumberLong);
   float itemsNumberFloat = 4.33f;
   System.out.println(itemsNumberFloat);
   double itemsNumberDouble = 4.99;
   System.out.println(itemsNumberDouble);
 }
}

Instrukcje wyświetlania danych

 public static void main(String[] args) {
   // deklaracja zmiennych 
   String imie;
   int wiek;
   double pensja;
   String miasto;
   // inicjalizacja zmiennych 
   imie = "Jurek";
   wiek = 22;
   System.out.println("Imię "+imie);
   System.out.println("Wiek "+wiek);
   System.out.println("Miasto "+miasto);
}

Instrukcje wczytywania danych z klawiatury

public class Main {
 public static void main(String[] args) {
   /*Przykład wczytywania i wyświetlania liczb(danych) */
   // Stworzenie obiektu klasy Scanner z parametrem System.in 
   // Ten obiekt posłuży do wczytywania liczb (danych) 
   Scanner in = new Scanner(System.in);
   // Przed wczytywanie danych należy poinformować użytkownika, 
   // co konkretnie ma wykonać: 
   System.out.println("Podaj liczbe calkowita");
   int a = in.nextInt(); // w tym przypadku metoda obiektu in 
   // (klasy Scanner) nextInt() powoduje wczytanie 
   // liczby całkowitej z klawiatury. 
   // Wyświetlenie tekstu oraz wartości wczytanej liczby: 
   System.out.println("Wczytana liczba, to: " + a);
   /* Obiekt in posiada więcej metod, których listę można zobaczyć po 
  wpisaniu: 
   * in. */
   //Dane można też wczytywać do wcześniej zadeklarowanych zmiennych: 
   System.out.println("Podaj nowa liczbe calkowita");
   a = in.nextInt();
   System.out.println("Wczytana liczba, to: " + a);
   // Oczywiście istnieje możliwość wczytania liczby rzeczywistej: 
   System.out.println("Podaj liczbe rzeczywista");
   float f = in.nextFloat();
   System.out.println("Wczytana liczba, to: " + f);
   // Metoda println powoduje wyświetlenie komunikatu i przejście do 
  nowej 
   // linii natomiast metoda print tylko wyświetla komunikat: 
   System.out.print("Komunikat 1a");
   System.out.print("Komunikat 2a");
   System.out.println(); // Nowa linia 
   System.out.println("Komunikat 1b");
   System.out.println("Komunikat 2b");
   // Przejście do nowej linii można również wymusić wstawiając znak 
  '\n' 
   System.out.print("Komunikat 1c\nKomunikat 2c\n");
   // W podobny sposób można wstawić znak tabulacji itp. 
   System.out.println("Komunikat 1d\tKomunikat 2d");
   // Dodatkowo można zastosować wyświetlanie danych podobne do 
   // znanego printf 
   // %f oznacza, że w to miejsce zostanie wstawiona liczba 
  rzeczywista 
   // %d oznacza, że w to miejsce zostanie wstawiona liczba całkowita 
   System.out.format("Podana liczba calkowita wynosi %d, natomiast "
   + "rzeczywista %f. Wynik dzielenia: %f\n", a, f, a / f);
   // W tym przypadku można wyświetlić również liczbę rzeczywistą z 
   // dokładnością do określonego miejsca po przecinku. Wystarczy 
  wtedy 
   // pomiędzy znakiem '%' a oznaczeniem 'f' dopisać kropkę '.' i 
  liczbę
   // oznaczającą dokładność. Np. %.3f oznacza, że liczba ma zostać
   // wyświetlona na 3 miejsca po przecinku. 
   System.out.format("Liczba rzeczywista %.3f. Wynik: %.2f\n", f, a /
  f);
   System.out.format("\nPI: %.4f, %.3f, %.2f, %.1f, %.0f\n",
   Math.PI, Math.PI, Math.PI, Math.PI, Math.PI);
  7 
 }

Instrukcje (Statements)

Określają konkretne działania w programie, takie jak na przykład deklarowanie i przypisywanie wartości lub sterowanie zachowaniem kodu. Wyróżniamy insrukcje:

Deklaracyjne (Declaration Statement) - umożliwiają zadeklarowanie zmiennej, na przykład:

int itemValue;
int itemMaxValue = 10;
String textElement;

Wyrażeniowe (Expression Statement) - elementy kodu zakończone średnikiem, na przykład:

// Wyrażenie zwiększenia (inkrementacja) lub zmniejszenia (dekrementacja) 
wartości o jeden: 
itemNumber++;
++itemNumber;
itemNumber--;
--itemNumber;
 
// Wyrażenie przypisanie wartości 
itemNumber = 100;
itemNumber *= 10;
 
// Wyrażenie wywołujące metodę
System.out.println("Fragment tekstu");
someMethod(parametr1, parametr2);

Operatory:

• Arytmetyczne: + - * / %

• Operatory porównania: == != < > <= >=

• Logiczne: &&   !

Przykład:

package com.company;
public class Main {
 public static void main(String[] args) {
   // write your code here 
   System.out.println("Hello Java");
   int itemValue = 100 + 50;
   System.out.println(itemValue);
   int itemCurrentValue = itemValue + 250;
   System.out.println(itemCurrentValue);
   int itemNextValue = itemCurrentValue + itemValue;
   System.out.println(itemNextValue);
   // Przypisanie nowej wartości do zmiennej 
   itemValue = 10;
   System.out.println(itemValue);
  8 
   // Dodanie nowej wartości do zmiennej 
   // i przypisanie wyniku do tej samej zmiennej 
   itemValue += 5;
   System.out.println(itemValue);
   // Pomnożenie wartości zmiennej 
   // i przypisanie wyniku do tej samej zmiennej 
   itemValue *= 3;
   System.out.println(itemValue);
   if (itemValue >= 10) {
   System.out.println("Zmienna jest większa od 10.");
   }
 }
}

Instrukcje warunkowe:

package com.company;
public class Main {
 public static void main(String[] args) {
   // write your code here 
   System.out.println("Hello Java");
   int numberOfItems = 220;
   if (numberOfItems < 100) {
     System.out.println("Liczba itemów mniejsza niż 100.");
   } else if (numberOfItems < 200) {
   System.out.println("Liczba itemów mniejsza niż 200.");
   } else {
     System.out.println("Liczba itemów nie jest mniejsza od 100 ani 
  od 200. Jest większa bądź równa 200.");
   }
 }
}

Instrukcja wyboru Switch

package com.company;
public class Main {
 public static void main(String[] args) {
   // write your code here 
   System.out.println("Hello Java");
   int numberOfItems = 50;
   switch (numberOfItems) {
   case 0:
     System.out.println("Liczba itemów równa jest 0.");
     break;
   case 10:
     System.out.println("Liczba itemów równa jest 10.");
     break;
   case 50:
     System.out.println("Liczba itemów równa jest 50.");
     break;
   case 103:
     System.out.println("Liczba itemów równa jest 103.");
     break;
   default:
     System.out.println("Liczba itemów jest inna niż
    przewidywana");
   }
 }
}

Zadania:

Zadanie 1.

Napisz metodę, która zwróci twoje imię oraz aktualny wiek.

Zadanie 2.

Napisz metodę, która jako argument przyjmuje 2 liczby i wypisuje ich sumę, różnicę i iloczyn. Argumenty przekazywane do metody są liczbami wprowadzanymi przez użytkownika z klawiatury.

Zadanie 3.

Napisz metodę, która jako argument przyjmuje liczbę i zwraca true jeśli liczba jest parzysta.

Zadanie 4.

Napisz metodę, która jako argument przyjmuje liczbę i zwraca true jeśli liczba jest podzielna przez 3 i przez 5.

Zadanie 5.

Napisz metodę, która jako argument przyjmuje liczbę i zwraca go podniesionego do 3 potęgi.

Zadanie 6.

Napisz metodę, która jako argument przyjmuje liczbę i zwraca jej pierwiastek kwadratowy.

Zadanie 7.

Napisz metodę, która jako argument przyjmie trzy liczby. Metoda powinna zwrócić true jeśli z odcinków o długości przekazanych w argumentach można zbudować trójkąt prostokątny. Argumenty przekazywane do metody są liczbami losowymi z przedziału <a,b> a i b wczytywane są przez użytkownika z klawiatury.