Person z1 = new Person();
V Javě máme následující příkazy:
=
a jeho modifikace (kombinované operátory jako je +=
apod.)
if
, switch
, for
, while
, do-while
return
;
=
(assignment)
int
lze přiřadit do long
int
→ short
=
lze použít i pro přiřazení do objektové proměnné:
Person z1 = new Person();
Person
( new Person()
)
z1
typu Person
z2
:
Person z2 = z1;
z1
a z2
ukazují nyní na fyzicky stejný (identický) objekt typu osoba!!!
identifikaceObjektu.názevMetody(skutečné parametry)
, kde:
identifikaceObjektu
, jehož metodu voláme
.
(tečka)
názevMetody
, jíž nad daným objektem voláme
return
return
může být specifikována návratová hodnota
neboli neúplné větvení pomocí if
if (logický výraz) příkaz
true
), provede se příkaz.
if (logický výraz) příkaz1 else příkaz2
true
), provede se příkaz1.
else
se nemusí uvádět.
while
, tj. s podmínkou na začátkuwhile
Tělo cyklu se provádí tak dlouho, dokud platí podmínka, obdoba v Pascalu, C a dalších
while (podmínka) příkaz;
while
se složeným příkazemwhile (podmínka) { příkaz1; příkaz2; příkaz3; ... }
while (i < a.length) System.out.println(a[i]); i++;
while (i < a.length) { System.out.println(a[i]); i++; }
if (i < a.length) { System.out.println(a[i]); }
while
cykluint i = 0; while (i < args.length) { System.out.println(args[i]); i++; }
while
— celočíselné děleníwhile
pro realizaci
celočíselného dělení se zbytkem.
public class DivisionBySubtraction { public static void main(String[] args) { int dividend = 10; // dělenec int divisor = 3; // dělitel int quotient = 0; // podíl int remainder = dividend; while (remainder >= divisor) { remainder -= divisor; quotient++; } System.out.println("Podil 10/3 je " + quotient); System.out.println("Zbytek 10/3 je " + remainder); } }
do-while
, tj. s podmínkou na koncirepeat
v Pascalu (podmínka je ovšem interpretována opačně)
do { příkaz1; příkaz2; příkaz3; ... } while (podmínka);
do-while
cyklufloat number; boolean isOK; // create a reader from standard input BufferedReader in = new BufferReader(new InputStream(System.in)); // until a valid number is given, try to read it do { String input = in.readLine(); try { number = Float.parseFloat(input); isOK = true; } catch (NumberFormatException nfe) { isOK = false; } } while(!isOK); System.out.println("We've got the number " + number);
import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; public class UntilEnteredEnd { public static void main(String[] args) throws IOException { BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); String line = ""; do { line = input.readLine(); } while (!line.equals("end")); System.out.println("Uživatel zadal " + line); } }
for
for
cyklus v C/C++ jde de-facto o rozšíření cyklu while
.
for(počáteční op.; vstupní podm.; příkaz po každém průch.) příkaz;
{
a }
proto,
že když přidáme další příkaz,
už nezapomeneme dát jej do složených závorek:
for (počáteční op.; vstupní podm.; příkaz po každém průch.) { příkaz1; příkaz2; příkaz3; }
for
cyklufor (int i = 0; i < 10; i++) { System.out.println(i); }
0
až 9
.
for
se většinou užívá jako cyklus s pevným počtem opakování,
známým při vstupu do cyklu. Tento počet nemusí být vyjádřený konstantou
(přímo zadaným číslem), ale neměl by se v průběhu cyklu měnit.
i = 0
a
i++
je neostrou nerovností: i
se na začátku rovná 0), zatímco
i < 10
je ostrou nerovností: i
už hodnoty 10 nedosáhne!
for
cyklu.
for
se téměř vždy vyskytuje tzv. řídicí proměnná,
for (int i = 0; …
int i; for (i = 0; …
i
přístupná ("viditelná") i za cyklem,
což se však ne vždy hodí.
switch case default
select - case - else
switch-case
v C, — zejména se chová jako C při "break-through"
switch - case - default
switch(výraz) { case hodnota1: prikaz1a; prikaz1b; prikaz1c; ... break; case hodnota2: prikaz2a; prikaz2b; ... break; default: prikazDa; prikazDb; ... }
case
.
break
,
který předá řízení ("skočí") na první příkaz za ukončovací závorkou
příkazu switch
.
switch
další infobyte
, short
, char
a int
, dále
enum
),
String
a některých dalších.
switch
příklad s číslypublic class MultiBranching { public static void main(String[] args) { if (args.length == 1) { int i = Integer.parseInt(args[0]); switch (i) { case 1: System.out.println("jednicka"); break; case 2: System.out.println("dvojka"); break; case 3: System.out.println("trojka"); break; default: System.out.println("neco jineho"); break; } } else { System.out.println("Pouziti: java MultiBranching <cislo>"); } } }
switch
příklad se String
Převzato z tutoriálu Oracle
switch (month.toLowerCase()) { case "january": monthNumber = 1; break; case "february": monthNumber = 2; break; case "march": monthNumber = 3; break; ...
switch
příklad se společnými větvemi case
Převzato z tutoriálu Oracle
int month = 2; int year = 2000; int numDays = 0;
switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; ...
if - else
můžeme samozřejmě vnořovat do sebe.
if(podmínka_vnější) { if(podmínka_vnitřní_1) { ... } else { ... } } else { if(podmínka_vnitřní_2) { ... } else { ... } }
else
vztahuje vždy k nejbližšímu
neuzavřenému if
, např. znovu předchozí příklad:
if(podmínka_vnější) if(podmínka_vnitřní1) ... else // vztahuje se k if(podmínka_vnitřní1) else // vztahuje se k if(podmínka_vnější) if (podmínka_vnitřní_2) ... else // vztahuje se k if (podmínka_vnitřní_2) ...
public class NestedBranching { public static void main(String args[]) { int i = Integer.parseInt(args[0]); System.out.print(i+" je cislo "); if (i % 2 == 0) { if (i > 0) { System.out.println("sude, kladne"); } else { System.out.println("sude, zaporne nebo 0"); } } else { if (i > 0) { System.out.println("liche, kladne"); } else { System.out.println("liche, zaporne"); } } } }
if - else if - else
if (podmínka1) { ... // platí podmínka1 } else if (podmínka2) { ... // platí podmínka2 } else if (podmínka3) { ... // platí podmínka3 } else { ... // neplatila žádná }
if - else if - else
public class MultiBranchingIf { public static void main(String[] args) { if (args.length == 1) { int i = Integer.parseInt(args[0]); if (i == 1) System.out.println("jednicka"); else if (i == 2) System.out.println("dvojka"); else if (i == 3) System.out.println("trojka"); else System.out.println("jine cislo"); } else { System.out.println("Pouziti: java MultiBranchingIf <cislo>"); } } }
break
switch
.
break
v cyklu:
int i = 0; for (; i < a.length; i++) { if(a[i] == 0) { break; // skoci se za konec cyklu } } if (a[i] == 0) { System.out.println("Nasli jsme 0 na pozici "+i); } else { System.out.println("0 v poli neni"); }
switch
jsme již viděli přímo v ukázkách pro switch
.
continue
for (int i = 0; i < a.length; i++) { if (a[i] == 5) continue; // pětku vynecháme System.out.println(i); }
1
, 2
, 3
, 4
, 6
, 7
, 8
, 9
, nevypíše hodnotu 5
.
break
i continue
public class BreakContinue { public static void main(String[] args) { if (args.length == 2) { int limit = Integer.parseInt(args[0]); int skip = Integer.parseInt(args[1]); for (int i = 1; i <= 20; i++) { if (i == skip) continue; System.out.print(i+" "); if (i == limit) break; } System.out.println("\nKonec cyklu"); } else { System.out.println( "Pouziti: java BreakContinue <limit> <vynechej>"); } } }
Note
|
Příklad je pouze ilustrativní — v reálu bychom break
na ukončení cyklu v tomto případě nepoužili a místo toho bychom limit
dali přímo jako horní mez for cyklu. |
break
a continue
s návěštímbreak
přerušen nebo
continue
.
public class Label { public static void main(String[] args) { outer_loop: for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { System.out.print((i*j)+" "); if (i*j == 25) break outer_loop; } System.out.println(); } System.out.println("\nKonec cyklu"); } }