Java 1 2015

http://tinyurl.com/java-1-2015

Główne operacje w w IntelliJ IDEA:

http://tinyurl.com/wsiz-intellij

Repozytorium kodu wykładu:

https://github.com/teamWSIZ/JavaS1_2015

[Uwaga: dokument pisany jest na bieżąco, więc jego początek jest na dole]

Cele wykładu:

  1. Efektywne IDE do rozwoju dużych aplikacji (IntelliJ IDEA / Ultimate)
  2. Obiektowo zorientowane podejście do programowania
  3. ~google interview: kodowanie, algorytmy, system design


Zajęcia 29 Stycznia:

Tworzenie dialogów:

Przekazywanie danych między obiektami Javy:


Podsumowanie 15. I.

https://github.com/teamWSIZ/JavaS1_2015/tree/master/src/Zajecia_10_Hash

  1. Wykorzystanie klas biblioteki standardowej Javy:
  1. Licznie hash-ów wiadomości: MessageDigest,
  2. drukowanie ciągu bajtów w postaci hexadecymalnej (dwa znaki/bajt): DatatypeConverter
  1. Tworzenie aplikacji graficznej liczącej hash z wiadomości wpisanej do TextArea
  1. → SecretApp.java
  1. Tworzenie wykonywalnych “.jar”ów:
  1. File>ProjectStructure>Artifacts
  2. +/Jar/FromModulesWithDependencies
  3. Wybrać “Main Class”, czyli gdzie ma program startować
  4. By stworzyć “.jar”: Build>BuildArtifacts>jar
  5. jar pojawia się w MyProject\out\artifacts\Java1p_2015_jar\Java1p 2015.jar

Zadanie: wykorzystać kod do szyfrowania i dekodowania wiadomości algorytmem AES, ,do stworzenia programu szyfrującego/dekodującego wiadomość w GUI (zaszyfrowaną wiadomości przedstawić w postaci hex, tak jak to było w przypadku hash-u MD5)



Zajecia 6 XI:

Podstawy klas i obiektow:

https://gist.github.com/anonymous/6f1c466cdd9758e84997

Zadanie: oprogramować klasę Winda:

class Winda {

   int ladunek;

   int poziom;

   int maxpoziom;

   int minpoziom;

   int maxladunek;

 

   void zaladuj(int dodatkowyLadunek){}

   void przejedzWgoreOh(int wgore) {}

   void przejedzNaPoziom(int poziomDocelow){}

   void rozladuj(int ileWyladowac){}

}


Zajęcia 30 X:

Kod do akwarium:

https://gist.github.com/anonymous/34e7471a9117af452366

Zadanie: dokończyć program tak, by można przy pomocy slider-ów ustalać wymiary akwarium i liczyć jego objętość.


Zajęcia 23 X:

Zadanie z książkami:

Pan Czesław kupuje 20 typów książek; zakupy ułożył sobie następująco: kupuje jedną książkę typu 1, dwie książki typu 2, trzy typu 3 itd, i na koniec 20 książek typu 20. Każda książka typu 1 kosztuje 50zł, typu 2 49, typu 3 48 itd, i typu 20 31zł.

        Proszę wyliczyć całkowity koszt zakupu.

[Wersja trudniejsza: Czesław kupi M książek (int M definiowane na górze programu, np. M=100, albo M=5); proszę podliczyć sumę, ale w przypadku, gdy cena egzemplarza książki miałaby być mniejsza niż 1, cena ta jest ustalana na 1zł.]

Tworzenie GUI w Idea:

  1. Jak nową kalsę, ale wybrać New>GUI Form
  2. Zapamiętać, by głównemu (najwyższemu w hierarchii) JPanel nadać w Property>”field name” jakąś nazwę
  3. Poprzeciągać na form elementy graficzne wg. uznania; szczególnie dobrze jest grupować je wewnątrz dodatkowych JPanel-i.
  4. Przejść do kodu klasy o nazwie takiej jak nasze GUI
  5. Będąc wewnątrz klasy wybrać z Menu>Generate, i potem ostatnią opcję, “Form Main”
  6. Tego typu klasa jest kompilowalna, i po uruchomieniu powinno się pojawić elementarne GUI.

Zadanie domowe: Zadana jest liczba całkowita, np. “int x = 12345667;”. Proszę napisać program który oblicza sumę cyfr tej liczby.

Rozwiązanie:

public class SumaCyfr {

   public static void main(String[] args) {

       int x = 12345;

       int suma = 0;

       for (int i = 0; i < 200; i++) {

           suma += (x % 10); // +=  dodaje prawą stronę do "suma"

           x /= 10;        // /= to to samo co x = x / 10; czyli x jest dzielone przez 10

       }

       System.out.println(suma);

   }

}


Zadanie z tabliczką -- c.d.:

Mając daną tabliczkę mnożenia n x n (n dane w programie) policzyć ile razy występuje w niej liczba “x” (również dana w programie).

Inne zadanie:

Niech dana będzie liczba całkowita (int) n; np. int n = 34; wiadomo, że suma liczb naturalnych od 1 do n (t.j. 1 + 2 + 3 + … + n) wynosi n*(n+1)/2. Pisząc program który sumuje liczby sprawdzić czy ten wzrór jest prawdziwy.

Szkic rozwiązania

int n = 302;

int wynik = 0;

//for i … 1 … n (włącznie)

   // suma = suma + i

// wypisać co jest w suma

// osobno wypisać n*(n+1)/2

Rozwiązanie:

public static void main(String[] args) {

    int n = 302;

    int suma = 0;

    for (int i = 1; i <= n; i++) {

        suma += i;

            }

    System.out.println("Z sumy:" + suma);

    System.out.println("Z wzoru:" + (n*(n+1)/2));

}

Prosta gra z punktem poruszającym się losowo (dla wglądu w mechanizmy typowych programów):

https://gist.github.com/teamWSIZ/d5c6be87591975f4e73c

Zadanie domowe: (pojawi się tu wkrótce)


Instalacja w domu:

https://chocolatey.org/

(package manager pod windowsa)

choco install jdk8

choco install intellijidea-community


Praca z IntelliJ

Tworzenie nowego projektu:

→ New Project

→ Wybrać SDK (Software development kit) → New → znaleźć kartotekę JDK (zwykle ProgramFiles>Java>JDK_8_60…)

→ Nexty…

Tworzenie wykonywalnej klasy:

→ na tab-ie projektu (po lewej)

→ w kartotece “src”

→ prawy klawisz myszy (RMB) > new > java class … nazwać

Prosty program:

public class A {

   public static void main(String[] args) {

       System.out.println("hi");

   }  

}

----- >> ---- podstawy pogramowania: zmienne, pętle i instrukcje warunkowe:

public class A {

   public static void main(String[] args) {

       //zmienne

       System.out.println("hi");

       int x = 10;

       String sss = "Hallo from Java";

       System.out.println(x);

       System.out.println(sss);

       int y = 12;

       System.out.println(x + y);

       System.out.println(sss + sss);

       int z = y*y*y*y;

       System.out.println(z);

       //petle

       for (int i = 0; i < 10; i++) {

           System.out.println(i*i);

       }

       //instrukcje warunkowe

       if (x<y) {

           System.out.println("x jest mniejsze niz y, bo x-y=" + (x-y));

       } else {

           System.out.println("x jest wieksze badz równe y bo x-y=" + (x-y));

       }

   }

}

Sklepik różności:

Zadanie 1:

Znaleźć liczby (w zakresie 1..1000) podzielne przez 7 i podzielne przez 13

Zadanie 2:

Mając daną liczbę całkowitą “x” sprawdzić czy jest ona pierwsza, tzn. sprawdzić wszystkie liczby d=2…(x/2) i wypisać “ma podzielnik”, jeśli x jest podzielna.

Rozwiązanie:

for (int i = 1; i < 16; i++) {

   System.out.println("Tablica dla " + i );

   for (int j = 1; j < 16; j++) {

       System.out.println(i + " x " + j + " = " + (i*j));

   }

   System.out.println();

}

ZadanieDomowe0:

Zainstalować sobie IntelliJ IDEA i JDK, i spowodować by programy się kompilowały i uruchamiały.

ZadanieDomowe1:

Wypisać tabliczkę mnożenia (aż do 15x15):

Wskazówka:

int x = 10;

int y = 11;

System.out.println("x=" + x + "  y=" + y + " x*y=" + (x*y));