Deprecated: Function set_magic_quotes_runtime() is deprecated in /DISK2/WWW/lokiware.info/mff/wakka.php on line 35

Přednášející:  Petr Hnětynka (Na jeho webu najdete slajdy, požadavky k zápočtu apod.)
Petr Hnětynka (Na jeho webu najdete slajdy, požadavky k zápočtu apod.)
K zápočtu je třeba docházka a/nebo úkoly, zápočtový program (projekt) a praktický zápočtový test v labu (podrobnosti na  Hnětynkových stránkách). Za zmínku stojí, že s sebou můžete mít jakékoli psané a tištěné materiály, ale na webu můžete jen na dokumentaci JDK a, podle toho co říkal, i když na webu to nemá, slajdy z přednášky.
Hnětynkových stránkách). Za zmínku stojí, že s sebou můžete mít jakékoli psané a tištěné materiály, ale na webu můžete jen na dokumentaci JDK a, podle toho co říkal, i když na webu to nemá, slajdy z přednášky.
Možné řešení testu ze  4. 2. 2009 14:00:
4. 2. 2009 14:00:  file:zapoctovadb.java — Adam
file:zapoctovadb.java — Adam
Pozorování: Některá zadání jsou výrazně lehčí, a některá výrazně těžší. Na nic nepotřebujete být geniální programátoři ani mít hluboké znalosti API a už vůbec ne objektově orientovaného programování (Mimochodem, všimli jste si, že tohle je společný znak všech zkoušek a zápočtů z objektově orientovaných jazyků a dokonce i předmětu, který se z mě neznámého důvodu jmenuje Objektově orientované programování? Není to podezřelé?), ale některé věci prostě sežerou víc kódu, a tedy i času. Časový limit bývá docela přesně dodržován (tj. prodlužuje se třeba o čtvrt hodiny, ale ne o hodinu). Úspěšnost některých termínu je proto menší než poloviční. Takže pokud to napoprvé prostě nestihnete, nevěšte hlavu, příště (nebo přespříště:/) nejspíš dostanete něco fakt snadného. — Adam
Můžou se Vám hodit tyhle !/Kousky Kódu (když si je vytisknete, na net se totiž mimo dokumentace API nesmí).
Probíhá formou testu (trochu jako C++). Letošní otázky (z 2. 2. 2008) najdete na  fóru. Bodování i obtížnost se od minulého roku trochu změnila, viz otázky z minulého roku (leden 2008), najdete na
fóru. Bodování i obtížnost se od minulého roku trochu změnila, viz otázky z minulého roku (leden 2008), najdete na  velké matfyzácké wiki.
velké matfyzácké wiki.
Pro řešení zaškrtávacích otázek viz  vlákno na fóru.
vlákno na fóru.
9. Napište metodu, která má dva parametry typu int, hrubou mzdu a daň v procentech, a vrací hodnotu typu double udávající daň k zaplacení. Ověřte, že daň je v rozmezí 0–100 a mzda je nezáporná, pokud parametry nejsou v pořádku vyhoďte výjimku MyException, která je přímým potomkem java.lang.Exception (předpokládá se, že je deklarovaná a importovaná).
Řešení:
public class TaxCalculator{
  /* MyException je přímý potomek java.lang.Exception => je třeba deklarovat: */
  public double calculateTax(int gross, int taxPercentage) throws MyException{
    if( gross < 0 || taxPercentage < 0 || taxPercentage > 100 )
      throw new MyException();
    /* Pro FP aritmetiku je třeba buď přetypovat nebo použít FP konstantu (tady 100.0): */
    return gross * (taxPercentage/100.0);
  }
}
10. Napište třídu pro dynamické pole hodnot typu int. Implementujte jen metody pro přidání prvku na konec pole void add(int x) a získání hodnoty prvku int get(int i) (v případě chybného indexu by měla vyvolat výjimku). Pro implementaci použijte skutečné pole hodnot typu int, které se podle potřeby dynamicky realokuje.
Řešení:
public class DynamicArray{
  private int[] intArray = new int[0]; // Nejsnažší řešení (netřeba ošetřovat hodnotu null a/nebo vyhazovat výjimky).
  public  int   get(int i){
    /*
     * Následující přístup může vyhodit ArrayIndexOutOfBoundsException,
     * kterou nemá smysl zachytávat jen, abychom ji opět vyhodili.
     * Jedná se o runtime exception, takže se ani nedeklaruje v hlavičce.
     */
    return intArray[i];
  }
  public  void  add(int x){
    /*
     * Místo ručního kopírování lze použít:
     * - java.lang.System.arraycopy(),
     * nebo ještě lépe:
     * - java.util.Arrays.copyOf(),
     * ale to bych asi u zkoušky nedělal, neb si nepamatuju pořadí parametrů.
     */
    int[]  intArrayX  = new int[intArray.length + 1];  // (zvýšení jen o 1 je na implementaci nejjednodušší)
    int    i          = 0;
    for(int a : intArray)
      intArrayX[i++]  = a;
    intArrayX[i]      = x;
    intArray          = intArrayX;
  }
} Glossary: slovníček pojmů jako autoboxing, class variable a většiny klíčových slov.
Glossary: slovníček pojmů jako autoboxing, class variable a většiny klíčových slov.
 Learning the Java Language: dobrý úvod do jazyka Java, více méně pokrývá část přednášky věnovanou jazyku (ne knihovnám) a obsahuje kontrolní otázky trochu ve stylu těch zkouškových (hledejte kapitoly Questions and Exercises).
Learning the Java Language: dobrý úvod do jazyka Java, více méně pokrývá část přednášky věnovanou jazyku (ne knihovnám) a obsahuje kontrolní otázky trochu ve stylu těch zkouškových (hledejte kapitoly Questions and Exercises).
 Javadoc: psaní komentářů pro automatické generování dokumentace.
Javadoc: psaní komentářů pro automatické generování dokumentace.
 Essential Java Classes: přehled základních tříd.
Essential Java Classes: přehled základních tříd.
 Collections: kolekce.
Collections: kolekce.
 Creating a GUI with JFC/Swing: úvod do Swingu.
Creating a GUI with JFC/Swing: úvod do Swingu.
 Generics,
Generics,  Custom Networking,
Custom Networking,  2D Graphics: specializovanější úvody.
2D Graphics: specializovanější úvody.
 Slajdy z přednášky (Hnětynka)
Slajdy z přednášky (Hnětynka)
 SE 6,
SE 6,  SE 5.0,
SE 5.0,  SE 1.4.2
SE 1.4.2Zkouším podle slajdů a dalších zdrojů sepsat přehled Javy (tj. hlavně jazyka), ne vyčerpávající, ale takový, aby stačil někomu, kdo umí C(++), a z velké části pokrýval zkouškové otázky. Můžete taky něco přihodit. — Adam
 úplný seznam na sun.com,
úplný seznam na sun.com,  přehled (v PDF) s info o každém klíčovém slově (s výjimkou později přidaných assert, enum, strictfp, ale pozor: naopak obsahuje true, false, null, což nejsou klíčový slova).
přehled (v PDF) s info o každém klíčovém slově (s výjimkou později přidaných assert, enum, strictfp, ale pozor: naopak obsahuje true, false, null, což nejsou klíčový slova).
 web Sunu).
web Sunu).
| Typ | Velikost | Min | Max | Wrapper | 
| boolean | - | - | - | Boolean | 
| char | 16 b | Unicode 0 | Unicode 216-1 | Character | 
| byte | 8 b | -128 | +127 | Byte | 
| short | 16 b | -215 | +215-1 | Short | 
| int | 32 b | -231 | +231-1 | Integer | 
| long | 64 b | -263 | +263-1 | Long | 
| float | 32 b | IEEE754 | IEEE754 | Float | 
| double | 64 b | IEEE754 | IEEE754 | DoubleUnicode | 
 povídání o enum na sun.com.
povídání o enum na sun.com.
int[]
    a   = new int[1],           // pole typu int[]   délky 1, neinicializované
    d   = {42, 13},             // pole typu int[]   délky 2, obsahuje položky 42, 13
    b[] = new int[1][1],        // pole typu int[][] délky 1, obsahuje pole typu int[] délky 1, neinicializované
    c[] = new int[2][],         // pole typu int[][] délky 2, neinicializované
    d[] = {{4},{2}},            // -//-, obsahuje pole typu int[] {délky 1 obsahující 4, délky 1 obsahující 2}
    e[] = { new int[0], {42} }, // -//-, obsahuje { pole typu int[] délky 0, pole typu int[] délky 1 obsahující 42}
    f[][][] = {{{{},{}},{},{{}}},{}}; // ...proč ne?[public] [abstract] [final] class JménoTřídy [extends NějakáNadtřída] [implements NějakýInterface[, ...]] { 
  /* deklarace atributů: instančních proměnných, nebo třídních ("static") proměnných): */
  [public|protected|private] [static] [final] jménoTypu jménoProměnné;
  /* např.: */
  private boolean b;
  String s;
  /* konstruktory (jako metody, ale bez návratového typu, jméno shodné se jménem třídy) */
  /* metody: obyčejné nebo "static" (třídní, nezávislé na instanci), 
   * (mohou být přetěžovaná na základě typu parametrů, ne návratové hodnoty): */
  [public|protected|private] [static] [final] návratovýTyp|void jméno( seznamParametrů ){ 
    tělo
  }
  /* abstraktní metody (bez těla, mohou být je v abstraktní třídě): */
  abstract  [public|protected] návratovýTyp|void jméno( seznamParametrů );
} Classes and Objects (sun.com), nebo zkuste
Classes and Objects (sun.com), nebo zkuste  vnitřní třídy trochu odlehčeně.
vnitřní třídy trochu odlehčeně.
 povídání o final.
povídání o final.
 povídání na JavaRanch.com. [U primitivních typů se předá jejich skutečná hodnota, u objektů je hodnotou odkaz (tzn. odpovídá to & v C+)  a toto chování nelze (narozdíl od C++) změnit. Takže pokud nechceme, aby metoda měnila objekt, je nutné explicitně vytvořit kopii, pro použití primitivních typů jako výstupních parametrů je nutné je zakrabicovat.]
povídání na JavaRanch.com. [U primitivních typů se předá jejich skutečná hodnota, u objektů je hodnotou odkaz (tzn. odpovídá to & v C+)  a toto chování nelze (narozdíl od C++) změnit. Takže pokud nechceme, aby metoda měnila objekt, je nutné explicitně vytvořit kopii, pro použití primitivních typů jako výstupních parametrů je nutné je zakrabicovat.]
návěstíVenku: for(...){ // vnější cyklus
  while(...){ // vnitřní cyklus
    break; 
    continue; 
    continue návěstíVenku; // pokračuje novou iterací vnějšího cyklu
  }
}