Java Cvičení 01 http://d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics
Příklady - Porovnání Co kód vypíše? package cz.cuni.mff.java.example01.tests; public class Test01 { public static void main(string[] argv) { Integer i1 = new Integer(1); Integer i2 = new Integer(1); if (i1 == i2) { System.out.println("ANO"); else { System.out.println("NE");
Příklady - Porovnání Operátor == porovnává ADRESY správné řešení Object.equals(Object o) pozor na NULL if (i1.equals(i2)) { System.out.println("ANO"); else { System.out.println("NE");
Coding style package x;class hw{public static void main(string[] a){system.out.println( A"+(char)('k +1)+"f ); Základní zvyklosti JménoTřídy - (Camel case) Začátek slova velké písmeno getpositionx()- package, metoda, field začínají malým písmenem po if, while, for, metodě, třídě - { na stejném řádku Doporučený Coding style - http://www.oracle.com/
Příklady - Přetečení Co program vypíše? package cz.cuni.mff.java.example01.tests; public class Test02 { public static void main(string[] argv) { int b = 2147483646; System.out.println(b); b = b + 1; System.out.println(b);
Příklady - Přetečení // JAVAC Překláda.java (source code) do *.class souboru // parametry jména SOUBORŮ pro přeložení src:>javac cz/cuni/mff/java/example01/tests/test02.java // JAVA spuštění programu (potřebuje *.class soubory) // parametr jméno TŘÍDY s main metodou src:>java cz.cuni.mff.java.example01.tests.test02 2147483646 2147483647 Přetečení definované chování
Příklady - Přetečení Správné řešení předdefinované hodnoty MAX_VALUE, MIN_VALUE, per Typ Integer, Short, Float, Long, int b = Integer.MAX_VALUE;
Příklady - Swap Co program vypíše? package cz.cuni.mff.java.example01.tests; public class Test03 { public static void main(string[] argv) { int x = 10; int y = 20; x ^= y ^= x ^= y; System.out.println(x); System.out.println(y); A - nejde přeložit E vypíše 0 20 I něco jiného B - runtime chyba F vypíše 0 10 C - vypíše 10 20 G vypíše 10 0 D - vypíše 20 10 H vypíše 20 0
Příklady - Swap Správné řešení NEPOUŽÍVAT Max. jedno přiřazení na příkaz x ^= y ^= x ^= y; chování je definované ^= operátor použije hodnotu na začátku příkazu
Příklady - ForCycle Co program vypíše? package cz.cuni.mff.java.example01.tests; public class Test04 { public static void main(string[] argv) { int j = 0; for (int i = Integer.MAX_VALUE 10; i <= Integer.MAX_VALUE; i++) { j++; System.out.println(j); A 10 B 11 C 0 D nic E runtime chyba
Příklady - ForCycle Správné řešení D Nekonečná smyčka Podmínka i <= Integer.MAX_VALUE; je vždy splněna
Příklady - URL Co program vypíše? package cz.cuni.mff.java.example01.tests; public class Test05 { public static void main(string[] argv) { System.out.print("url:"); http://google.com/ System.out.print(":url"); A nejde přeložit B runtime chyba C vypíše url:http://google.com/:url D vypíše url::url
Příklady - URL Řešení LabelNávěští: // Komentář Java povoluje Label před libovolným příkazem break/continue label; Kontrolují, že label je před cyklem, ve kterém je příkaz zanořen Chyba při překladu Jinde nemá Label smysl Použití: Jen kuriozita
Omezení na dnešní cvičení textový editor & konzole žádné IDE IDE základ efektivního programování umět ho používat DÚ - vybrat si IDE Pokusit se i příklady z hodiny Beginners tutorials Eclipse (CZ), NetBeans
Hello World Napište HelloWorld Použít vlastní package Přeložte a spusťte (javac, java) package cz.cuni.mff.java; public class Hello { public static void main(string[] args) { System.out.println("Hello world!");
Hello World // Adresář pro projekt a balíčky // musí odpovídat s package ~:>mkdir project/src/cz/cuni/mff/java // Implementuj třídu ~:>gedit project/src/cz/cuni/mff/java/hello.java // Překlad (vytvoří Hello.class) // jméno SOUBORU pro přeložení ~:>javac project/src/cz/cuni/mff/java/hello.java // JAVA spuštění programu (potřebuje jen class soubory) // -cp kde hledat class soubory // (adresáře s package se doplňují automaticky) // jméno TŘÍDY s main metodou ~:>java -cp project/src cz.cuni.mff.java.hello Hello world! ~:>
Hints Výstup standardní výstup - System.out System.out.print() definováno pro všechny typy vypíše parametr System.out.println() jako print()+ odřádkuje System.out.printf() použití jako printf v C/C++ System.out.printf("1 + 2 = %d\n, 1 + 2); Javadoc - PrintStream
Hello World verze 2 Vytvořte si vlastní třídu Printer v jiném package Printer.printLine(String s) statická metoda pro vytištění řádku na obrazovku Hello bude užívat třídu Printer Kompilace + spuštění
Další úlohy PrintArgs Vypíše argumenty programu z příkazové řádky Každý na nový řádek // Jak předat argumenty programu z příkazové řádky? // Parametry Java po jménu spustitelné třídy ~:>java -cp project/src cz.cuni.mff.java.printagrs arg1 Help me arg1 Help me ~:>
Hints parametry main public static void main(string[] args) parametry args ~ parametry z příkazové řádky obsahuje pouze parametry neobsahuje jako v C/C++ název programu array.length délka pole návratová hodnota programu main metoda - void System.exit(3);
Další úlohy Multiplication Vypíše na tabulku s malou násobilkou Hint: printf( ) Co nestihnete doporučuji zkusit jako DÚ v případě problému email cvičícímu