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-whilereturn;
Operátor přiřazení = (assignment)
Rozlišujeme přiřazení
Na pravé straně je výraz vracející hodnotu primitivního typu:
Na levé straně je proměnná téhož nebo širšího typu jako přiřazovaná hodnota:
int lze přiřadit do longPři zužujícím přiřazení se také provede konverze, ale může dojít ke ztrátě informace:
int → short
Konstrukci = lze použít i pro přiřazení do objektové proměnné:
Person z1 = new Person();
Co to udělalo?
Person ( new Person() )
z1 typu Person
Nyní můžeme odkaz na tentýž vytvořený objekt například znovu přiřadit do 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ámeNávrat z metody se děje:
returnreturn může být specifikována návratová hodnotaneboli 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čátkuwhileTě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;
...
}
Větvení, cykly: doporučuji vždy psát se složeným příkazem v těle (tj. se složenými závorkami)!!! Jinak hrozí, že se v těle větvení/cyklu z neopatrnosti při editaci objeví něco jiného, než chceme, např.:
while (i < a.length)
System.out.println(a[i]);
i++;
Pišme proto vždy takto:
while (i < a.length) {
System.out.println(a[i]);
i++;
}
U větvení obdobně:
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);
}
}
forfor 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 cykluProvedení určité sekvence určitý počet krát:
for (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.Používejte asymetrické intervaly (ostrá a neostrá nerovnost):
i = 0 ai++ je neostrou nerovností: i se na začátku rovná 0), zatímcoi < 10 je ostrou nerovností: i už hodnoty 10 nedosáhne!for cyklu.for se téměř vždy vyskytuje tzv. řídicí proměnná,Někteří autoři nedoporučují psát deklaraci řídicí proměnné přímo
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 defaultselect - case - elseswitch-case v C, — zejména se chová jako C při "break-through"switch - case - defaultswitch(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ší infoŘídicí výraz může nabývat hodnot
byte, short, char a int, dáleenum),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 StringPř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 casePř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 {
...
}
}
Je možné "šetřit" a neuvádět složené závorky,
v takovém případě se 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Časteji rozvíjíme pouze druhou (negativní) větev:
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 - elsepublic 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>");
}
}
}
breakswitch.
Syntaxe použití 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.continueZpůsobí přeskočení zbylé části průchodu tělem cyklu
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 continuepublic 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>");
}
}
}
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ímUmožní ještě jemnější řízení průchodu vnořenými cykly:
break přerušen nebocontinue.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");
}
}
/