Java týden Body zdarma
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Lekce 5 - Podmínky (větvení)

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Typový systém podruhé: Datové typy, jsme si podrobně probrali datové typy. Abychom si něco naprogramovali, potřebujeme nějak reagovat na různé situace. Může to být například hodnota zadaná uživatelem, podle které budeme chtít měnit další běh programu. Říkáme, že se program větví a k větvení používáme podmínky, těm se budeme věnovat celý dnešní díl. Vytvoříme program na výpočet odmocniny a vylepšíme naši kalkulačku.

Podmínky

V Javě se podmínky píší úplně stejně, jako ve všech CLike jazycích, pro začátečníky samozřejmě vysvětlím. Pokročilejší se asi budou chvilku nudit :)

Podmínky zapisujeme pomocí klíčového slova if, za kterým následuje logický výraz. Pokud je výraz pravdivý, provede se následující příkaz. Pokud ne, následující příkaz se přeskočí a pokračuje se až pod ním. Vyzkoušejme si to:

if (15 > 5)
    System.out.println("Pravda");
System.out.println("Program zde pokračuje dál");

Výstup programu:

Konzolová aplikace
Pravda
Program zde pokračuje dál

Pokud podmínka platí (což zde ano), provede se příkaz vypisující do konzole text pravda. V obou případech program pokračuje dál. Součástí výrazu samozřejmě může být i proměnná:

System.out.println("Zadej nějaké číslo");
int a = Integer.parseInt(sc.nextLine());
if (a > 5)
    System.out.println("Zadal jsi číslo větší než 5!");
System.out.println("Děkuji za zadání");

Ukažme si nyní relační operátory, které můžeme ve výrazech používat:

Operátor C-like zápis
Rovnost ==
Je ostře větší >
Je ostře menší <
Je větší nebo rovno >=
Je menší nebo rovno <=
Nerovnost !=
Obecná negace !

Rovnost zapisujeme dvěma == proto, aby se to nepletlo s běžným přiřazením do proměnné, které se dělá jen jedním =. Pokud chceme nějaký výraz znegovat, napíšeme ho do závorky a před něj vykřičník. Když budeme chtít vykonat více než jen jeden příkaz, musíme příkazy vložit do bloku ze složených závorek:

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
int a = Integer.parseInt(sc.nextLine());
if (a > 0)
{
    System.out.println("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!");
    double o = Math.sqrt(a);
    System.out.println("Odmocnina z čísla " + a + " je " + o);
}
System.out.println("Děkuji za zadání");

Konzolová aplikace
Zadej nějaké číslo, ze kterého spočítám odmocninu:
144
Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!
Odmocnina z čísla 144 je 12.0
Děkuji za zadání
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Často můžete vidět použití bloku i v případě, že je pod podmínkou jen jeden příkaz, mnohdy je to totiž přehlednější. Nezapomeňte si naimportovat java.util.Scanner, aby program znal třídu Scanner.

Program načte od uživatele číslo a pokud je větší než 0, vypočítá z něj druhou odmocninu. Mimo jiné jsme použili třídu Math, která na sobě obsahuje řadu užitečných matematických metod, někdy si ji blíže představíme. Sqrt() vrací hodnotu jako double. Bylo by hezké, kdyby nám program vyhuboval v případě, že zadáme záporné číslo. S dosavadními znalostmi bychom napsali něco jako:

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
int a = Integer.parseInt(sc.nextLine());
if (a > 0)
{
    System.out.println("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!");
    double o = Math.sqrt(a);
    System.out.println("Odmocnina z čísla " + a + " je " + o);
}
if (a <= 0)
{
    System.out.println("Odmocnina ze záporného čísla neexistuje!");
}
System.out.println("Děkuji za zadání");

Všimněte si, že musíme pokrýt i případ, kdy se a == 0, nejen když je menší. Kód však můžeme výrazně zjednodušit pomocí klíčového slova else, které vykoná následující příkaz nebo blok příkazů v případě, že se podmínka neprovede:

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
int a = Integer.parseInt(sc.nextLine());
if (a > 0)
{
    System.out.println("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!");
    double o = Math.sqrt(a);
    System.out.println("Odmocnina z čísla " + a + " je " + o);
}
else
{
    System.out.println("Odmocnina ze záporného čísla neexistuje!");
}
System.out.println("Děkuji za zadání");

Kód je mnohem přehlednější a nemusíme vymýšlet opačnou podmínku, což by v případě složené podmínky mohlo být někdy i velmi obtížné. V případě více příkazů by byl za else opět blok { }.

Else se také využívá v případě, kdy potřebujeme v příkazu manipulovat s proměnnou z podmínky a nemůžeme se na ni tedy ptát potom znovu. Program si sám pamatuje, že se podmínka nesplnila a přejde do sekce else. Ukažme si to na příkladu: Mějme číslo a, kde bude hodnota 0 nebo 1 a po nás se bude chtít, abychom hodnotu prohodili (pokud tam je 0, dáme tam 1, pokud 1, dáme tam 0). Naivně bychom mohli kód napsat takto:

int a = 0; // do a si přiřadíme na začátku 0

if (a == 0) // pokud je a 0, dáme do něj jedničku
{
    a = 1;
}
if (a == 1) // pokud je a 1, dáme do něj nulu
{
    a = 0;
}

System.out.println(a);

Nefunguje to, že? Pojďme si projet, co bude program dělat. Na začátku máme v a nulu, první podmínka se jistě splní a dosadí do a jedničku. No ale rázem se splní i ta druhá. Co s tím? Když podmínky otočíme, budeme mít ten samý problém s jedničkou. Jak z toho ven? Ano, použijeme else.

int a = 0; // do a si přiřadíme na začátku 0

if (a == 0) // pokud je a 0, dáme do něj jedničku
{
    a = 1;
}
else // pokud je a 1, dáme do něj nulu
{
    a = 0;
}

System.out.println(a);

Podmínky je možné skládat a to pomocí dvou základních logických operátorů:

Operátor C-like Zápis
A zároveň &&
Nebo ||

Uveďme si příklad:

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.println("Zadejte číslo v rozmezí 10-20:");
int a = Integer.parseInt(sc.nextLine());
if ((a >= 10) && (a <= 20))
{
    System.out.println("Zadal jsi správně");
}
else
{
    System.out.println("Zadal jsi špatně");
}

S tím si zatím vystačíme, operátory se pomocí závorek samozřejmě dají kombinovat.

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.println("Zadejte číslo v rozmezí 10-20 nebo 30-40:");
int a = Integer.parseInt(sc.nextLine());
if (((a >= 10) && (a <= 20)) || ((a >=30) && (a <= 40)))
{
    System.out.println("Zadal jsi správně");
}
else
{
    System.out.println("Zadal jsi špatně");
}

Switch

Switch je konstrukce, převzatá z jazyka C (jako většina gramatiky Javy). Umožňuje nám zjednodušit (relativně) zápis více podmínek pod sebou. Vzpomeňme si na naši kalkulačku v prvních lekcích, která načetla 2 čísla a vypočítala všechny 4 operace. Nyní si ale budeme chtít zvolit, kterou operaci chceme. Bez switche bychom napsali kód podobný tomuto:

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.println("Vítejte v kalkulačce");
System.out.println("Zadejte první číslo:");
float a = Float.parseFloat(sc.nextLine());
System.out.println("Zadejte druhé číslo:");
float b = Float.parseFloat(sc.nextLine());
System.out.println("Zvolte si operaci:");
System.out.println("1 - sčítání");
System.out.println("2 - odčítání");
System.out.println("3 - násobení");
System.out.println("4 - dělení");
int volba = Integer.parseInt(sc.nextLine());
float vysledek = 0;
if (volba == 1)
{
        vysledek = a + b;
}
else if (volba == 2)
{
        vysledek = a - b;
}
else if (volba == 3)
{
        vysledek = a * b;
}
else if (volba == 4)
{
        vysledek = a / b;
}
if ((volba > 0) && (volba < 5))
{
        System.out.println("Výsledek: " + vysledek);
}
else
{
        System.out.println("Neplatná volba");
}
System.out.println();
System.out.println("Děkuji za použití kalkulačky.");

Konzolová aplikace
Vítejte v kalkulačce
Zadejte první číslo:
3.14
Zadejte druhé číslo:
2.72
Zvolte si operaci:
1 - sčítání
2 - odčítání
3 - násobení
4 - dělení
2
Výsledek: 0.42
Děkuji za použití kalkulačky.

Všimněte si, že jsme proměnnou výsledek deklarovali na začátku, jen tak do ni můžeme potom přiřazovat. Kdybychom ji deklarovali u každého přiřazení, Java by kód nezkompilovala a vyhodila chybu redeklarace proměnné. Důležité je také přiřadit výsledku nějakou výchozí hodnotu, zde nula, jinak by nám Java vyhubovala, že se snažíme vypsat proměnnou, která nebyla jednoznačně inicializována. Proměnná může být deklarována (založena v paměti) vždy jen jednou. Další vychytávka je kontrola správnosti volby. Program by v tomto případě fungoval stejně i bez těch else, ale nač se dále ptát, když již máme výsledek.

Nyní si zkusíme napsat ten samý kód pomocí switche:

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.println("Vítejte v kalkulačce");
System.out.println("Zadejte první číslo:");
float a = Float.parseFloat(sc.nextLine());
System.out.print("Zadejte druhé číslo:");
float b = Float.parseFloat(sc.nextLine());
System.out.println("Zvolte si operaci:");
System.out.println("1 - sčítání");
System.out.println("2 - odčítání");
System.out.println("3 - násobení");
System.out.println("4 - dělení");
int volba = Integer.parseInt(sc.nextLine());
float vysledek = 0;
switch (volba)
{
    case 1:
        vysledek = a + b;
    break;
    case 2:
        vysledek = a - b;
    break;
    case 3:
        vysledek = a * b;
    break;
    case 4:
        vysledek = a / b;
    break;
}
if ((volba > 0) && (volba < 5))
{
    System.out.println("Výsledek: " + vysledek);
}
else
{
    System.out.println("Neplatná volba");
}
System.out.println();
System.out.println("Děkuji za použití kalkulačky.");

Vidíme, že kód je trochu přehlednější. Pokud bychom potřebovali v nějaké větvi switche spustit více příkazů, překvapivě je nebudeme psát do bloku, ale rovnou pod sebe. Blok {} nám zde nahrazuje příkaz break, který způsobí vyskočení z celého switche. Switch může místo case x: obsahovat ještě možnost default:, která se vykoná v případě, že nebude platit žádný case. Je jen na vás, jestli budete switch používat, obecně se vyplatí jen při větším množství příkazů a vždy jde nahradit sekvencí if a else. Nezapomínejte na breaky. Switch je v Javě podporován i pro hodnoty stringové proměnné a to od Javy 7.

To bychom měli. V příští lekci, Cykly v Javě, nás čekají pole a cykly, tím dovršíme základní znalosti, máte se na co těšit :)


 

Stáhnout

Staženo 855x (35.09 kB)
Aplikace je včetně zdrojových kódů v jazyce java

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
63 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Předchozí článek
Typový systém podruhé: Datové typy
Všechny články v sekci
Základní konstrukce jazyka Java
Miniatura
Následující článek
Cvičení k 5. lekci Javy
Aktivity (9)

 

 

Komentáře

Avatar
xxxvodnikxxx
Člen
Avatar
xxxvodnikxxx:17.3.2013 9:33

Článek, konkrétně sekci o switch bych doplnil, že se používá větev default: pro ošetření nevyužitýho vstupu (tzn. nevyhovuje žádný jiný case :) )

Odpovědět  ±0 17.3.2013 9:33
Unix- svět, kde chcete být nulou :) (UID)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na xxxvodnikxxx
David Čápka:17.3.2013 10:16

Je to v článku napsané :)

Odpovědět  ±0 17.3.2013 10:16
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
xxxvodnikxxx
Člen
Avatar
Odpovídá na David Čápka
xxxvodnikxxx:17.3.2013 11:24

ok, sorry, jen jsem to jen tak zběžně prolítnul :)

Odpovědět  -1 17.3.2013 11:24
Unix- svět, kde chcete být nulou :) (UID)
Avatar
Matěj Kripner
Redaktor
Avatar
Matěj Kripner:15.1.2014 14:44

Mohl by mi někdo pomoct s otevíráním aplikací z Javy? (např. ty pod tímto článkem). Když soubor otevřu, zobrazí se mi jako složka a já absolutně nevím, co otevřít. V 1. tutoriálu je zmínka o Java Web Star, ale ať hledám, jak chci, nemůžu o tomhle programu nic zjistit. Díky!

Odpovědět 15.1.2014 14:44
Give me a deep enough pipeline, and I shall move the world.
Avatar
Petr
Neregistrovaný
Avatar
Odpovídá na Matěj Kripner
Petr:15.2.2014 11:43

Když si stáhneš přílohu, rozbalíš jí. Jako první uvidíš složku s názvem projektu (v niž se celý projekt nachází). V této složce se většinou nachází podsložka s názvem src (source code). Ta může obsahovat nějaké další podsložky (package)a zdroják :-)

Já osobně se učím v Java Eclipse, pokud chceš zdroják otevřít, bude postupovat i v NetBeans asi takto. File > Open File > ve výše popsané složce otevřeš soubor <název>.java :)

 
Odpovědět 15.2.2014 11:43
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na Petr
Matěj Kripner:15.2.2014 17:25

Dík moc, funguje! :D

Odpovědět 15.2.2014 17:25
Give me a deep enough pipeline, and I shall move the world.
Avatar
hanpari
Redaktor
Avatar
hanpari:28.8.2014 15:27

Možná bys měl vysvětlit rozdíl mezi && vs. &. Přijde mi celkem důležitý :) Pokud jsem to v textu přehlédl, tak se omlouvám. Jestli se nepletu, pak & v jave (stejně jako v c#) vyhodnocuje obě podmínky, zatímco && tu druhou jen v případě, že první je OK. Podobné by to mělo být u | vs. ||

 
Odpovědět 28.8.2014 15:27
Avatar
samuel.matus282:12.9.2014 14:09
:)
 
Odpovědět 12.9.2014 14:09
Avatar
iOli
Člen
Avatar
iOli:9.12.2014 12:21

Perfektné tutoriály chválim autora je to naozaj super oveľa lepšie vysvetlené ako na Vysokej škole.

 
Odpovědět 9.12.2014 12:21
Avatar
Pavol Kubek
Člen
Avatar
Odpovídá na iOli
Pavol Kubek:9.5.2015 22:04

Dufam, ze na,moje mojej vyske budu vediet vysvetlovat spravne :)

 
Odpovědět 9.5.2015 22:04
Avatar
Tyler Hardstone:9.8.2015 13:04

Nahodou niekto neviete, cca kolko je tych premiovych clankov v celej sekcii Java? Aby som si vedel nejak rozlozit tie body, lebo nemozem si dovolit kupit ich vela.

Odpovědět 9.8.2015 13:04
Give me liberty, or give me death
Avatar
Odpovídá na Tyler Hardstone
Tyler Hardstone:10.8.2015 0:26

Tak uz nic, predsa len som si to vyratal ked som mal chvilu volno. :-)

Odpovědět 10.8.2015 0:26
Give me liberty, or give me death
Avatar
ra3sk
Člen
Avatar
ra3sk:12.9.2015 14:37
if ((a >= 10) && (a <= 20))

prečo musí byť a>=10 v zátvorke ??

 
Odpovědět 12.9.2015 14:37
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na ra3sk
tomisoka:12.9.2015 14:47

Nemusí to být v závorce, protože operátor >= má přednost před &&, takže se vykoná dřív. Ale pro potřeby tohoto tutoriálu je asi lepší použít závorky, aby se nemuselo vysvětlovat co má přednost.

 
Odpovědět 12.9.2015 14:47
Avatar
ra3sk
Člen
Avatar
Odpovídá na tomisoka
ra3sk:12.9.2015 15:20

ok diky

 
Odpovědět 12.9.2015 15:20
Avatar
Daniel Pavlo
Člen
Avatar
Daniel Pavlo:12.10.2015 12:48

Zaujíma ma, prečo na konci predposledný riadok - System.out.prin­tln(); vynechá po kompilácii voľný riadok len v prípade ak je splnená druhá podmienka, čiže zadá sa číslo < ako 1 a zároveň > ako 4???

 
Odpovědět 12.10.2015 12:48
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Daniel Pavlo
Taskkill:12.10.2015 14:17

Číslo menší než 1 a větší než 4 ? to nenastane...na co se konkrétně ptáš? Když říkáš po kompilaci, tys to zkompiloval a kouknul jsi se do výsledného kódu?

 
Odpovědět 12.10.2015 14:17
Avatar
Daniel Pavlo
Člen
Avatar
Odpovídá na Taskkill
Daniel Pavlo:12.10.2015 16:42

Zrejme som sa zle som sa vyjadril. Mam na mysli posledny priklad, kde je pouzity switch a na konci, kde je:

if ((volba > 0) && (volba < 5))

        System.out.printf("Výsledek: %f", vysledek);
else
        System.out.println("Neplatná volba");
System.out.println();
System.out.println("Děkuji za použití kalkulačky.");
  • predposledny riadok "System.out.prin­tln();" vynecha po spusteni volny riadok len v pripade ak dojde k neplatnej volbe (cize ak sa zada cislo mensie ako 1 a vacsie ako 4). Preco to nespravi aj v pripade platnej volby?
 
Odpovědět 12.10.2015 16:42
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na Daniel Pavlo
tomisoka:12.10.2015 16:59

Funguje při obou případech, ale pokud je platná volba:

System.out.printf("Výsledek: %f", vysledek);//používá se printf, takže se automaticky
//neodřádkuje
System.out.println();//Teprve teď se posouváme na další řádek

neplatná volba:

System.out.println("Neplatná volba");//používá se println -> posouváme se na další řádek
System.out.println();//znovu se posouváme na další řádek

Mimochodem:
(cize ak sa zada cislo mensie ako 1 nebo vacsie ako 4)
V původní verzi to může být pro ostatní matoucí.

Editováno 12.10.2015 17:02
 
Odpovědět  +1 12.10.2015 16:59
Avatar
Erik Báča
Člen
Avatar
Erik Báča:28.10.2015 16:57
package jednoduchá.kalkulačka;

import java.util.Scanner;

public class JednoducháKalkulačka {

    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in,"Windows-1250");

       System.out.println("Vítejte v kalkulačce");
       System.out.println("Zadejte číslo");
       float a = Float.parseFloat (sc.nextLine()) ;
       System.out.println("Zadejte druhé číslo");
       float b = Float.parseFloat (sc.nextLine());
       System.out.println("Zvolte operaci: ");
       System.out.println("1 - sčítání");
       System.out.println("2 - odčítání");
       System.out.println("3 - násobení");
       System.out.println("4 - dělení");
       int volba = Integer.parseInt (sc.nextLine());
       float vysledek = 0;
       if (volba == 1)
                vysledek = a + b;
       else
        if (volba == 2)
                vysledek = a - b;
       else
       if (volba == 3)
                vysledek = a * b;
       else
       if (volba == 4)
                vysledek = a / b;
       else
       if ((volba > 0) && (volba < 5))
                System.out.printf("Výsledek: %f", vysledek);
       else
                System.out.println("Neplatná volba");
       System.out.println();
       System.out.println("Děkujeme za použítí kalkulačky");


    }

}

Mohl by mi někdo poradit proč mi to nefunguje?
Odpovědět 28.10.2015 16:57
Když mi dáš mínus, napiš proč!
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na Erik Báča
Tomáš Brůna:28.10.2015 17:57

před:

if ((volba > 0) && (volba < 5))

smaž else:

   vysledek = a * b;
else
if (volba == 4)
         vysledek = a / b;

if ((volba > 0) && (volba < 5))
         System.out.printf("Výsledek: %f", vysledek);
else
         System.out.println("Neplatná volba");
System.out.println();
System.out.println("Děkujeme za použítí kalkulačky");
Odpovědět  +2 28.10.2015 17:57
Vi veri universum vivus vici
Avatar
Erik Báča
Člen
Avatar
Odpovědět  +1 28.10.2015 18:46
Když mi dáš mínus, napiš proč!
Avatar
Katarína Blashco:5.11.2015 14:56

Ahojte, prosím vás viete mi poradiť, prečo mi vypisuje chybu "else without if "??

 
Odpovědět 5.11.2015 14:56
Avatar
B42P6
Člen
Avatar
Odpovídá na Katarína Blashco
B42P6:5.11.2015 15:10

Za if sa bodkočiarka nedáva. ;)

Odpovědět 5.11.2015 15:10
'long long long' is too long for GCC
Avatar
Odpovídá na Katarína Blashco
Libor Šimo (libcosenior):5.11.2015 15:10

Za podmienku if () sa nepíš ; - stredník ;-)

Odpovědět 5.11.2015 15:10
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na B42P6
Katarína Blashco:6.11.2015 13:09

Ďakujem vam krásne :-D už to funguje, som to ja ale ... 8-| :-)

 
Odpovědět 6.11.2015 13:09
Avatar
iqbigbang
Člen
Avatar
iqbigbang:31.12.2015 15:15

Omlouvám se, ale já si tu poznámku prostě nemůžu odpustit...
Odmocnina ze záporných čísel existuje, ale nelze ji vyjádřit v reálných číslech.

Odpovědět 31.12.2015 15:15
Say me, why not?
Avatar
iqbigbang
Člen
Avatar
iqbigbang:31.12.2015 15:16

Tak mě napadá, jde v Javě počítat s komplexními čísly?

Odpovědět 31.12.2015 15:16
Say me, why not?
Avatar
Odpovídá na iqbigbang
Neaktivní uživatel:31.12.2015 15:23

Nativně ne, ale můžeš použít například knihovnu Commons Math (https://commons.apache.org/…ommons-math/)

Odpovědět 31.12.2015 15:23
Neaktivní uživatelský účet
Avatar
Daniel Gubančik:2.3.2016 21:57

Chcem sa opýtať ked za IF nepoužijem ELSE medzi každým príkazom je to veľká chyba? Resp. v čom je rozdiel ? Kde by som mohol zistiť že mi to chýba?

 
Odpovědět 2.3.2016 21:57
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Daniel Gubančik
Taskkill:2.3.2016 22:30

To jsi asi spatne pochopil - pouziva se to takhle:

if(neco) {
        prikaz;
        funkce();
} else {
        prikaz;
        funkce();
}

a nebo, pokud mas prikaz jen jeden, nemusis pouzit slozeny zavorky a interpreter jazyka java to pochopi jako blok kodu o jednom radku a pak se pouziva takhle

if (neco)
        jeden_prikaz
else
        jednaFunkce();

// a tady uz pises normalne jako by tam zadna podminka nikdy nebyla, ne kazdy if nutne musi mit else, nebo else if .. ale tyhle dva se bez if -u nad sebou neobejdou ...

ty se musis zamyslet nad vyznamem slova if a else a pak prirozene pochopis jak se to pouziva.... neni to neco co pouzivas za kazdym vyskytem cehokoliv, je to velmi silna a konkretni konstrukce, kterou se tvori beh programu

 
Odpovědět 2.3.2016 22:30
Avatar
filiptartott
Člen
Avatar
filiptartott:7.4.2016 13:15

CO znamena %f vo vnutry- System.out.prin­tln("Výsledek: %f" , vysledek);

 
Odpovědět 7.4.2016 13:15
Avatar
filiptartott
Člen
Avatar
filiptartott:7.4.2016 13:32

A nebolo by lepsie keby sa volba deklarovala s byte

 
Odpovědět 7.4.2016 13:32
Avatar
Petr(K)
Člen
Avatar
Odpovídá na filiptartott
Petr(K):28.4.2016 21:59

ahoj filiptartott,
%f je zastupny znak za promennou "vysledek" v typu float. Podivej se do tohoto clanku http://www.itnetwork.cz/…-typy-string a vyhledej Format.

 
Odpovědět  +1 28.4.2016 21:59
Avatar
Petr Vít
Člen
Avatar
Petr Vít:28.4.2016 23:17

Zdravim,

proc musi byt ty operatory "+" pred a za promenou pri vystupu z konzole ? Viz:

System.out.prin­tln("Odmocnina z čísla " + a + " je " + o);

Diky moc

 
Odpovědět 28.4.2016 23:17
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Petr Vít
pocitac770:29.4.2016 6:58

Protože System.out.prin­tln(); bere jako parametr jeden String. Když chceš doplnit něco komplikovanějšího (třeba v jednom textu statický text a dynamickou konstantu), tak je musíš spojit. A jak se spojojí Stringy? No pomocí operáturu + :)

Editováno 29.4.2016 6:58
 
Odpovědět  +1 29.4.2016 6:58
Avatar
Štěpán
Člen
Avatar
Odpovídá na Daniel Gubančik
Štěpán:11.5.2016 22:31

"Else" nemusíš používat když ho nepotřebuješ. Je vlastně jen k tomu, aby se udělalo buď to, nebo to a ne obojí. Tedy když podmínka je pravdivá, ukoná se, ale to co je v "else" už ne. Hlavně záleží na situaci ve které to všechno používáš.

 
Odpovědět 11.5.2016 22:31
Avatar
krepsy3
Redaktor
Avatar
Odpovídá na Daniel Gubančik
krepsy3:11.5.2016 23:15

Nepoužít else rozhodně chybou není. Else je vlastně doplnění ifu - pokud potřebuješ, aby když se podmínka ifu nesplní se něco stalo. Příklad:

boolean podminka;
//něco, co vyhodnotí podmínku
if (podminka)
        System.out.Println("podmínka úspěšná");
else
        System.out.Println("podmínka neúspěšná")

Pokud si však vystačíš s tím, že uživateli sdělíš, že byla úspěšná, else vůbec nepotřebuješ. Může se ti ještě stát, že může dojít k víc, než jen dvěma stavům, a nelze použít switch. To pak použiješ

if - else if - else if - ... - else

A tím podmínky navětvíš.

Odpovědět 11.5.2016 23:15
Programátor je stroj k převodu kávy na kód.
Avatar
Pavel Šrytr
Člen
Avatar
Odpovídá na filiptartott
Pavel Šrytr:21.6.2016 18:43

%f je zástupce proměnné výsledek (viz. kapitola 3(

 
Odpovědět 21.6.2016 18:43
Avatar
Denis Gero
Člen
Avatar
Denis Gero:19.7.2016 14:20

Ide program napísaný v jave preniesť do appky do mobilu?

 
Odpovědět 19.7.2016 14:20
Avatar
mkub
Redaktor
Avatar
Odpovídá na Denis Gero
mkub:19.7.2016 19:36

pokial je napisana pre JVM toho telefonu, tak to ide

 
Odpovědět  +1 19.7.2016 19:36
Avatar
@[email protected]:3.8.2016 20:53

Můžu se zeptat jestli by šel napsat program, který by si od uživatele vyžádal heslo a pokud by heslo bylo správné program by pokračoval dál a když ne přesměrování by to uživatele zpáky.
Za odpověď děkuji.

Odpovědět 3.8.2016 20:53
Věřím, že když je člověk zapálen pro svou práci a snaží se, tak ho úspěch nemine.
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na @[email protected]
Lukas C#:3.8.2016 23:15

Jop, šel. Kdybys pokračoval ve čtení tutoriálů, tak bys na to přišel, ale:

String text  = "";
while(text != tvoje_heslo)
{
        text = sc.nextLine();
}
 
Odpovědět 3.8.2016 23:15
Avatar
Samuel Kobera:9.8.2016 16:24

Zdravím, som na ôsmom dieli, ale vrátil som sa sem, pretože mi nesedelo ako funguje else v mojom programe.

System.out.println("Dobrý deň, chcete šifrovať alebo dešifrovať?:");
        String poziadavka = sc.nextLine();
        if (poziadavka.equals("šifrovať"))
            poziadavka = poziadavka.replace("šifrovať", "sifrovat");
        if (poziadavka.equals("dešifrovať"))
            poziadavka = poziadavka.replace("dešifrovať", "desifrovat");
        if (poziadavka.equals("sifrovat")){
        System.out.println("Zadajte správu:");
       String sprava = sc.nextLine();
       sprava = sprava.toLowerCase();
       System.out.println("Zadajte heslo (čislo):");
       String sifra = "";
       int posun = Integer.parseInt(sc.nextLine());

       for (char c : sprava.toCharArray())
       {
          int i = (int)c;
           i = i + posun;
           //kontrola prečítania?
           if (i> (int)'z')
               i = i-26;
           char znak = (char)i;
           sifra = sifra + znak;
       }
       System.out.println(sifra);
    }
        if (poziadavka.equals("desifrovat")){
            System.out.println("Zadajte šifru:");
       String sprava = sc.nextLine();
       sprava = sprava.toLowerCase();
       System.out.println("Zadajte heslo (čislo):");
       String sifra = "";
       int posun = Integer.parseInt(sc.nextLine());
       posun = -posun;

       for (char c : sprava.toCharArray())
       {
          int i = (int)c;
           i = i + posun;
           char znak = (char)i;
           sifra = sifra + znak;
       }
       System.out.println(sifra);
        }
    else
            System.out.println("Tak nič.");

Tak nič mi malo vypísať, keď si nevyberiem ani jednu z možností šifrovať alebo dešifrovať, a to sa aj splní, problém je, že mi to vypíše aj po úspešnom splnení jednej z podmienok, čo by som mal zmeniť? ďakujem

run:
Dobrý deň, chcete šifrovať alebo dešifrovať?:
šifrovať
Zadajte správu:
ahoj
Zadajte heslo (čislo):
5
fmto
Tak nič.
BUILD SUCCESSFUL (total time: 6 seconds)
 
Odpovědět 9.8.2016 16:24
Avatar
David Oczka
Redaktor
Avatar
Odpovídá na Samuel Kobera
David Oczka:9.8.2016 16:47

Problém je v tom, že všude používáš if a ne elseify... Momentálně to máš postavené tak, že se "Tak nič" vypíše v případě, že poziadavka nerovná "desifrovat". Změň ty ify na elseify (samozřejmě až na ten první if, ten tam zůstane) a bude Ti to fungovat...

 
Odpovědět 9.8.2016 16:47
Avatar
Odpovídá na David Oczka
Samuel Kobera:10.8.2016 13:54

Funguje to, ďakujem :-)

 
Odpovědět 10.8.2016 13:54
Avatar
Miroslav Melzer:22.9.2016 20:21

Ahoj, poradíte mi kde je chyba ? Nějak mi tu nefunguje to if. Provede se výpočet i když zadam 5. A u toho else se objeví červený vykřičník s textem: else without if takže to pak nefunguje vůbec.

System.out.println (" Zde je možno spočítat obvod a obsah kruhu");
    System.out.println("zadej poloměr");
    float a = Float.parseFloat(sc.nextLine());
    if (a > 10);
    {
    System.out.println("Zadal jsi číslo větší než deset a to je dobře");
     float obvod = (2*3.14F)*a;
     float obsah = a*(3.14F*3.14F);
             System.out.printf("Obvod kruhu je: %f a obsah je %f", obvod,obsah);
    }

  else
    System.out.println(" Záporný kruh je chyba");

Zde je možno spočítat obvod a obsah kruhu
zadej poloměr
5
Zadal jsi číslo větší než deset a to je dobře
Obvod kruhu je: 31,400002 a obsah je 49,298004
BUILD SUCCESSFUL (total time: 2 seconds)

 
Odpovědět 22.9.2016 20:21
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Miroslav Melzer
vajkuba1234:22.9.2016 22:18

Za if () nesmi byt strednik. Smaz ho a pojede to.

Odpovědět 22.9.2016 22:18
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na vajkuba1234
Miroslav Melzer:23.9.2016 17:45

Ježiš díky, už to funguje.

 
Odpovědět  +1 23.9.2016 17:45
Avatar
borda01
Člen
Avatar
borda01:3.10.2016 22:44

Ahoj,
Dá se v jave použít i else if jako v C ?

 
Odpovědět  -2 3.10.2016 22:44
Avatar
Odpovídá na borda01
Neaktivní uživatel:3.10.2016 23:50

Není nic jednoduššího, než to vygooglovat nebo zkusit

Odpovědět 3.10.2016 23:50
Neaktivní uživatelský účet
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na borda01
Lukas C#:3.10.2016 23:51

Zkoušel jsi to? Ano, samozřejmě že dá :-) Na takovéto jednoduché otázky často najdeš odpověď sám, když o prostě zkusiš...

 
Odpovědět 3.10.2016 23:51
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
rybiz
Člen
Avatar
rybiz:24.11.2016 17:50

Ahoj takovej dotaz, v jedne ukazce mas napsane
float vysledek = 0;
if (volba == 1)
{
vysledek = a + b;
}
else if (volba == 2)
{
vysledek = a - b;
}
else if (volba == 3)
{
vysledek = a * b;
}
else if (volba == 4)
{
vysledek = a / b;
}
if ((volba > 0) && (volba < 5))
{
System.out.prin­tln("Výsledek: " + vysledek);
}
else
{
System.out.prin­tln("Neplatná volba");
}
System.out.prin­tln();
System.out.prin­tln("Děkuji za použití kalkulačky.");

proč tam píšeš jak else tak if "else if" když by v tomhle případě stačilo pouze if a bude to fungovat stejně.

float vysledek = 0;
if (volba == 1)
{
vysledek = a + b;
}
if (volba == 2)
{
vysledek = a - b;
}if (volba == 3)
{
vysledek = a * b;
}if (volba == 4)
{
vysledek = a / b;
}
if ((volba > 0) && (volba < 5))
{
System.out.prin­tln("Výsledek: " + vysledek);
}
else
{
System.out.prin­tln("Neplatná volba");
}
System.out.prin­tln();
System.out.prin­tln("Děkuji za použití kalkulačky.");
// TODO code application logic here
}

}

 
Odpovědět 24.11.2016 17:50
Avatar
DarkCoder
Člen
Avatar
Odpovídá na rybiz
DarkCoder:24.11.2016 18:23

Důvodem je efektivnost. Vzhledem ke způsobu, jakým překladač jazyka C vytváří cílový kód programu, potřebuje konstrukce IF-ELSE mnohem méně strojových instrukcí než za použití dalšího IF.

Odpovědět 24.11.2016 18:23
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Timotej Adamec:3.12.2016 16:20

Mám problém a nevím jak ho vyřešit. Zadal jsem zdroj.

    public static void main(String[] args) {
    Scanner sc = new Scanner("Windows-1250");
    System.out.println("Zadejte číslo");
    int a = Integer.parseInt(sc.nextLine());
    if (a > 0)
    {
        System.out.println("Zadal jste číslo větší než 0!");
        double o = Math.sqrt(a);
        System.out.println("Čislo " + a + "je po odmocnění " + o);
    }
    else
    {
        System.out.println("Toto číslo nemůže být odmocněno");
    }
    }
}

A hodí mi to chybu.

Exception in thread "main" java.lang.Num­berFormatExcep­tion: For input string: "Windows-1250"
at java.lang.Num­berFormatExcep­tion.forInput­String(Number­FormatExcepti­on.java:65)
at java.lang.Inte­ger.parseInt(In­teger.java:580)
at java.lang.Inte­ger.parseInt(In­teger.java:615)
at javaapplicati­on22.JavaAppli­cation22.main(Ja­vaApplication22­.java:22)
C:\Users\Tim\Ap­pData\Local\Net­Beans\Cache\8­.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

Děkuji za pomoc.

 
Odpovědět 3.12.2016 16:20
Avatar
Odpovídá na Timotej Adamec
Libor Šimo (libcosenior):3.12.2016 16:58

V canku je
Scanner sc = new Scanner(System.in, "Windows-1250");
Nebude problem tam?

Odpovědět 3.12.2016 16:58
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Michal Martinec:11.1.2017 13:22

Ahojte. Cital som teraz vsetky komentare a vela ludi malo problem, ze im nefungoval program spravne v pripade, ze dali medzeru za if (nieco). Kontroloval som si preto svoje programy, ktore som robil v ramci cviceni a tak sa mi zda, ze zalezi od IDE, ktore pouzivame. NetBeans 8.2 ignoruje medzeru a vsetko mi funguje aj s nou. Je to mozne, alebo je chyba niekde inde? Lebo som skusal dosadit v priklade kvadratickej rovnice do if (a!=0) nulu a normalne mi vypisalo ze nie je kvadraticka rovnica. Skusal som dat medzeru aj takto: if (a != 0) a aj tak to fungovalo.

Odpovědět 11.1.2017 13:22
Neporovnavaj sa s ostatnymi. Porovnavaj sa sam so sebou.
Avatar
Peter Gasparik:23.1.2017 22:02

Dobré to je. baví ma to, super ten switch :)

Editováno 23.1.2017 22:04
Odpovědět 23.1.2017 22:02
while (noSuccess) { tryAgain(); if (Dead) break;
Avatar
Paty Zóna
Člen
Avatar
Paty Zóna:14.2.2017 17:33

Jen takový feedback - tutoriály srozumitelné, dost dobré a hlavně jsem vám všem, co se na tomhle webu podílíte, opravdu neskonale vděčná za znalosti, které zde mohu čerpat!
(Ani mí učitelé neoplývají takovou štědrostí, co se předávání vědomostí týče. :-) )

 
Odpovědět  +4 14.2.2017 17:33
Avatar
Daniel Tesař:14.3.2017 19:26

Ahoj, mam problem z else jestli někdo nevíte, vždycky když použiju metodu else tak automaticky mi to vyplivne chybu v tom řádku a nevim si rady jak to opravit, prikladam fotku :), za pomoc budu velmi vděčný.

System je OSX.
Dan

Editováno 14.3.2017 19:27
 
Odpovědět 14.3.2017 19:26
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Daniel Tesař
pocitac770:14.3.2017 19:44

Za if se nepíše středník, není to konec logiky (logika klauzule if je ve složených závorkách), takhle to bere jako obyčejný kus kódu.

Editováno 14.3.2017 19:44
 
Odpovědět  +1 14.3.2017 19:44
Avatar
Odpovídá na pocitac770
Daniel Tesař:14.3.2017 23:48

Super :) tak proto, ještě jednou děkuju, sam sem si nad tim lamal hlavu a vubec mi to nedošlo

 
Odpovědět 14.3.2017 23:48
Avatar
Michal Klein
Člen
Avatar
Michal Klein:12.4.2017 21:20

Naozaj skvelé články David. Baví ma to

 
Odpovědět 12.4.2017 21:20
Avatar
Maroš Škumát:17.4.2017 23:00

Môže mi niekto vysvetliť aký význam tam má to Windows-1250 ? :)

Scanner sc = new Scanner("Windows-1250");
 
Odpovědět 17.4.2017 23:00
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Maroš Škumát
Adam Ježek:18.4.2017 3:33

To bude asi kódování, aby speciální znaky (žščř...) vypadaly jak mají.

Odpovědět 18.4.2017 3:33
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Kuba
Člen
Avatar
Kuba:1.5.2017 20:29

Ahoj, vytvořil jsem si amaterskou kalkulačku na kvadratické rovnice a přijde mi, že obsahuje poměrně hodně "ifů/elsů", zůstává "program" stále efektivní, nebo se již na dělení využívá jiná metoda? Dále pokud vytvořím cyklus x++, jak zadám, aby se cyklus zvýšil pouze o 0.5 a ne 1.0? Díky za Váš čas :)

package kvadrrovn;
import java.util.Scanner;

public class KvadrRovn {

    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in, "UTF-8");

       String repete = "ano";
       while (repete.contains("ano")) {

       System.out.println("Zadejte postupně hodnoty základního tvaru kvadratické rovnice:");
       System.out.println("ax2 + bx + c = 0");
       System.out.println("Zadej hodnotu a: [??x2 + bx + c = 0]");
       double a = Double.parseDouble(sc.nextLine().trim());
       System.out.println("Zadej hodnotu b: [" + a + "x2 + ??x + c = 0]");
       double b = Double.parseDouble(sc.nextLine().trim());
       System.out.println("Zadej hodnotu c: [" + a + "x2 + " + b + "x + ?? = 0]");
       double c = Double.parseDouble(sc.nextLine().trim());
       System.out.println("Zadání je: [" + a + "x2 + " + b + "x + " + c + " = 0]" );

       double D = (Math.pow(b, 2)) - (4 * a * c);
       if (a != 0){
           System.out.println("Diskriminant = " + D);
       if (D == 0) {
           System.out.println("Diskriminant je roven nule.\nRovnice má jedno 'dvoujnásobné' řešení: x1 = -b / 2*a");
           double x1D0 = -b / (2*a);
           System.out.println("Výsledek: x1 = " + x1D0);
       }
       else if (D < 0){
           System.out.println("Diskriminant je záporný.\nVýsledek: Rovnice nemá řešení v oboru reálných čísel.");
       }
       else {
           System.out.println("Diskriminant je kladný.\nVýsledek: Rovnice má 2 různá řešení:");
           double x1 = (-b + Math.sqrt(D)) / (2 * a);
           double x2 = (-b - Math.sqrt(D)) / (2 * a);
           System.out.println("x1 = " + x1 + "\nx2 = " + x2);
       }
       if (D >= 0){
       System.out.println("Nyní si dosadíme nějaké hodnoty pro nakreslení grafu:\nTabulka: [x;y]");

       for (int x = -5; x <= 5; x ++) {
          double y = a * Math.pow(x, 2) + b * x + c;
       System.out.println("[" + x +  ";" + y + "]");
       }

       }
         }
       else {
              System.out.println("a = 0, nejedná se o kvatratickou rovnici, ale lineární!");
               }

       System.out.println("Pokud chcete zadat další rovnici napište 'ano', pro ukončení jen zmáčkněte enter");
       repete = sc.nextLine().toLowerCase().trim();
       }
    }

}
 
Odpovědět 1.5.2017 20:29
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Kuba
gcx11:2.5.2017 0:19
for (double x = -5; x <= 5; x += 0.5d)

Ale počítej s tím, že to nemusí být přesné kvůli tomu, že se to ukládá do double. Lepší by bylo IMHO toto:

for (int y = -10; y <= 10; y += 10)
{
    double x = y/2.0d;
}
Editováno 2.5.2017 0:19
 
Odpovědět  +1 2.5.2017 0:19
Avatar
Kuba
Člen
Avatar
Odpovídá na gcx11
Kuba:2.5.2017 17:04

Děkuji, musím si nastudovat proč se používá znak += a ne jen +. Nicméně druhá varianta nefunguje úplně tak jak má, chci do y (dle tvého kódu) dosadit hodnoty po jedné polovině, pak mi ale i x vyhází poloviční hodnoty. Ještě na to musím mrknout, každopádně znaménko += vyřešilo můj problém. Na přesnosti výpočtu zamakám později. Díky!

 
Odpovědět 2.5.2017 17:04
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Kuba
pocitac770:2.5.2017 18:57
//přičte 1 k proměnné i
i++;
i = i + 1;
//přičte b k proměnné a
a += b;
a = a + b;
 
Odpovědět  +1 2.5.2017 18:57
Avatar
Kuba
Člen
Avatar
Odpovídá na Maroš Škumát
Kuba:7.5.2017 19:38

Ahoj, ještě tu mám jeden dotaz k podmínkám.. nenašel jsem jak lze určit podmínku zadání číselné hodnoty do vstupu.
Pokud uživatel např. v kalkulačce zadá písmenko, hodí program error. Rád bych si to nějak podchytil a vypsal při chybném zadání vlastní hlášku a případně nabídl uživateli nový pokus, aniž by shodil program. Napadla mě podmínka

if (pocet <= 0 || pocet >= 0 && i <= 0 || i >= 0){
.
.
.
.
}
        else {
            System.out.println("Zadal jsi neznámou hodnotu!");
        }

        System.out.println("Chceš zadat novou soutavu prvků? napiš ano/ne");
        pokracovat = sc.nextLine().toLowerCase().trim();

Což samozřejmě nefunguje :), resp. programu to nevadí, ale účel to neplní.

Díky za tip!

 
Odpovědět 7.5.2017 19:38
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Kuba
gcx11:8.5.2017 19:25

Asi bys potřeboval něco takového:

while (!sc.hasNextInt()){
     System.out.println("Please enter a valid number!");
     sc.next();
}
int result = sc.nextInt();
System.out.println("Number: " + result);
Editováno 8.5.2017 19:26
 
Odpovědět  +1 8.5.2017 19:25
Avatar
Arny
Člen
Avatar
Arny:21.6.2017 22:36

Ahoj, poradí mi někdo proč nejde tento program:

Scanner sc = new Scanner(System.in, "Windows-1250");
 System.out.println ("Zadej své jméno");
 String s = sc.nextLine();
 int a = (s.length());
 if ((a <= 3 ) && (a >= 10))
 {
     System.out.println ("Máš moc dlouhé nebo moc krátké jméno");
 }
 else
 {
     System.out.println ("Máš normální jméno");
 }

 }
 
Odpovědět 21.6.2017 22:36
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Arny
gcx11:22.6.2017 2:17

Máš tam

if ((a <= 3 ) && (a >= 10))

místo

if ((a <= 3 ) || (a >= 10))
 
Odpovědět 22.6.2017 2:17
Avatar
Arny
Člen
Avatar
Odpovídá na gcx11
Arny:22.6.2017 7:20

To jsem ... Díky

 
Odpovědět  +1 22.6.2017 7:20
Avatar
Abe
Člen
Avatar
Abe:2.7.2017 8:18

Taková matematická maličkost, ze které by však kdejaký učitel matematiky bláznil :)
Odmocnina z 0 je 0 - sqrt(0) je normálně definováno.

 
Odpovědět 2.7.2017 8:18
Avatar
Maroš Škumát:24.7.2017 20:03

Neviete prečo mi to vždy vyhodí chybu keď to spúšťam?

package vetvenie4;
import java.util.Scanner;

/**
 *
 * @author GamePC
 */
public class Vetvenie4 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in,"Windows-1250");
       System.out.println("Zadaj číslo buď - 10 až 20, 30 až 50, 60 až 90, 150 až 300, 700 až 1000:");
       int a = Integer.parseInt(sc.nextLine());
       if ((a >= 10) && (a <= 20)) || ((a >= 30) && (a <= 50)) || ((a >= 60) && (a <= 90)) || ((a >= 150) && (a <= 300)) || ((a >= 700) && (a <=1000))
       {

       System.out.println("Zadal si správne!");

       }
       else

       {
               System.out.println("Zadal si nesprávne!");
       }
    }


}
 
Odpovědět 24.7.2017 20:03
Avatar
Daniel Šup
Člen
Avatar
Odpovídá na Maroš Škumát
Daniel Šup:24.7.2017 20:55

Ahoj,

chybu ti to vyhodí z důvodu chybějící kulaté závorky těsně po klíčovém slově if a chybějící závorky těsně před složenou závorkou.
Máš tam

if ((a >= 10) && (a <= 20)) || ((a >= 30) && (a <= 50)) || ((a >= 60) && (a <= 90)) || ((a >= 150) && (a <= 300)) || ((a >= 700) && (a <=1000))
       {

místo

if (((a >= 10) && (a <= 20)) || ((a >= 30) && (a <= 50)) || ((a >= 60) && (a <= 90)) || ((a >= 150) && (a <= 300)) || ((a >= 700) && (a <=1000)))
       {
 
Odpovědět  +1 24.7.2017 20:55
Avatar
 
Odpovědět  +1 24.7.2017 23:31
Avatar
Michal Stisek:28.7.2017 16:55

Chci se zeptat jestli konstrukci else if mám chápat jako jinou funkci než samotné if a else, nebo je to jen prosté spojení těchto podmínek? Ještě se chci zeptat jestli uvažuju správně, když si myslím že do prvního if jde vnořit další konstrukce if/else a do nich další a tím vytvořit "strom" požadavků/podmínek pod tímto prvním if a stejně tak i u else? Nemám teď u sebe IDE a nemůžu to otestovat, tak si čtu a učím se :-) Díky

Editováno 28.7.2017 16:57
Odpovědět 28.7.2017 16:55
Jít pořád dál má smysl
Avatar
Odpovídá na Michal Stisek
Michal Štěpánek:28.7.2017 23:50

Else if ti vnoří další podmínku

If(podmínka)
{
Co se stane při splnění
}
Else if(jiná podmínka)
{
Co se stane...
}
Else
{
Co se stane, když nevyhoví žádná podmínka
}
Odpovědět  +1 28.7.2017 23:50
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Djedasd ajsdhakd:3.8.2017 22:10

Skvělý článek, hrozně baví :D Vytvořil jsem si takové lehké cvičení na téma, a povedlo se! :D Snažil jsem se vytvořit jednoduchý program, který uživatele požádá o jméno a věk, no a u věku člověku řekne jestli je dospělý, nebo ne :D Jestli by šel nějak upřesnit , nebo zlepšit pište! xD;

import java.util.Scanner;

public static void main(String[] args) {
Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.prin­tln("Jak se jmenuješ?");
String jmeno;
jmeno = sc.nextLine();
System.out.prin­tln("Kolik máš let ? ");
int a = Integer.parse­Int(sc.nextLi­ne());
if (a > 17)
System.out.prin­tln("Gratuluji jsi dospělý!");
if (a <= 17)
System.out.prin­tln("Bohužel, ještě nejsi dospělý!");
}

 
Odpovědět 3.8.2017 22:10
Avatar
Odpovídá na Djedasd ajsdhakd
Michal Šmahel:4.8.2017 0:38

Ahoj, zdrojové kódy je dobré umístit do příslušných značek (kliknutím na </> se vloží).

Nějaké úpravy by udělat šly.

Scanner sc = new Scanner(System.in, "Windows-1250");

System.out.println("Jak se jmenuješ?");
String jmeno = sc.nextLine();

System.out.println("Kolik máš let ? ");
int vek = Integer.parseInt(sc.nextLine());

if (vek >= 18)
    System.out.println("Gratuluji jsi dospělý!");
else
    System.out.println("Bohužel, ještě nejsi dospělý!");
Odpovědět 4.8.2017 0:38
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Michal Šmahel:4.8.2017 0:43

Název proměnné "a" není vhodný, chce to vždy něco konkrétního. Poté ty podmínky jdou podstatně zjednodušit, ze dvou se udělá jedna s tím, že se pomocí else odchytí případ, kdy není splněna (< 18).

Odpovědět 4.8.2017 0:43
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Djedasd ajsdhakd:5.8.2017 21:24

Ohh, díky moc. "Else" jsem si upravil již před přečtením tvé odpovědi ale String jmeno = sc.nextLine(); pomohlo ke stručnosti :D Za if (vek >= 18) jsem taky vděčný.

 
Odpovědět 5.8.2017 21:24
Avatar
Rico ThreeDmax:13.8.2017 21:18

Je nutne parsovat na int volbu operace u kalkulacky? Neprijdemi to logicky :-)

 
Odpovědět 13.8.2017 21:18
Avatar
Odpovídá na Rico ThreeDmax
Rico ThreeDmax:13.8.2017 21:25

Odpovim si sam. Ano je protoze nize porovnavame cisla

 
Odpovědět 13.8.2017 21:25
Avatar
Odpovídá na Rico ThreeDmax
Michal Šmahel:13.8.2017 21:29

Můžeš porovnávat i řetězce, ale když se jedná pouze o číselné hodnoty, je lepší to parsovat na číselný datový typ.

Odpovědět 13.8.2017 21:29
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Rico ThreeDmax:13.8.2017 22:32

Kdyz to necham v retezci tak jak porovnas v prikazu if jestli jsi zmackl mezi 1-4?

 
Odpovědět 13.8.2017 22:32
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Rico ThreeDmax
pocitac770:14.8.2017 0:05

Právě to je ten důvod, proč se používají číselné hodnoty... lépe se organizují možné odpovědi... :D
Jinak jako ano, šlo by to podle regulárních výrazů, ale to je už poněkud složitější záležitost...
Pomud by ti nešlo o zjištění rozsahu, tak by šlo místo 1 použít "1", což je ekvivalent pro to, když ve switchi neporovnáváme čísla ale řetězce

 
Odpovědět  +1 14.8.2017 0:05
Avatar
Odpovídá na Rico ThreeDmax
Michal Šmahel:14.8.2017 0:08

Nech si vypsat vstup před a po parsování. Co se týče porovnání řetězců, není to těžké. Podívej se na funkci equals().

// Instance Skeneru
Scanner sc = new Scanner(System.in, "Windows-1250");

// Vstup
String vstup = sc.nextLine();

/* <nedoporucuji> */
// Porovnání řetězců
if (vstup.equals("1")) {
        System.out.println("Vybrána volba č. 1");
}
/* </nedoporucuji> */

/* <lepsi> */
// Parsujeme na ciselny datovy typ - napr. pouzity int
int vstupCislo = Integer.parseInt(vstup);

// Porovnani cisel
if (vstupCislo == 1) {
        System.out.println("Vybrána volba č. 1");
}
/* </lepsi> */

Stále ovšem platí to, co jsem psal v předchozím komentáři: Pokud pracuješ s čísly, pracuj s nimi ve vhodném číselném datovém typu, string není pro běžná čísla vhodný.

Odpovědět 14.8.2017 0:08
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Rico ThreeDmax:14.8.2017 19:32

Bezva diky moc

 
Odpovědět 14.8.2017 19:32
Avatar
Radka Jánská:25.8.2017 22:36

Ahoj všichni, řeším dilema s klávesnicí. Používáte při programování českou nebo anglickou klávesnici? Vzhledem k tomu, že Java vychází z angličtiny mi přijde logické používat anglickou, ale co potom, když do stringu píšete český text nebo ho potřebujete dát do českých (dvojitých) úvozovek? Přehazujete klávesnici? Na druhou stranu, pokud používáte českou klávesnici, jak píšete znaky, které nemá (anglické uvozovky, větší než / menší než, složené závorky, hranaté závorky apod.)? Předem děkuji za podněty.

 
Odpovědět 25.8.2017 22:36
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Radka Jánská
Petr Štechmüller:25.8.2017 22:49

Ahoj, jde o zvyk. Já všechno píšu na české klávesnici. Ty speciální znaky lze psát pomoci pravého altu (alt gr).
"<" = "alt gr + ?"
">" = "alt gr + ."
"{" = "alt gr + b"
"}" = "alt gr + n"
"[" = "alt gr + f"
"[" = "alt gr + g"

Zbytek zkratek najdeš na netu...

Odpovědět  +1 25.8.2017 22:49
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Patrik Valkovič
Šéfredaktor
Avatar
Odpovědět 25.8.2017 22:59
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Zdeněk Lenk
Člen
Avatar
Zdeněk Lenk:4.2.2018 9:51

Zdravím,

když do níže uvedeného programu zadám v NetBeans v konzoli 0 nebo záporné číslo, tak mi jako odpověd nevyběhne tato hláška: Odmocnina ze záporného čísla neexistuje! Čím to může být? Program jsem jen zkopíroval z těchto stránek a neupravil.

package podminka3;

import java.util.Scanner;

public class Podminka3
{
public static void main(String[] args) {

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.prin­tln("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
int a = Integer.parse­Int(sc.nextLi­ne());
if (a > 0)
{
System.out.prin­tln("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!");
double o = Math.sqrt(a);
System.out.prin­tln("Odmocnina z čísla " + a + " je " + o);
}
if (a <= 0)
{
System.out.prin­tln("Odmocnina ze záporného čísla neexistuje!");
}
System.out.prin­tln("Děkuji za zadání");
}
}

 
Odpovědět 4.2.2018 9:51
Avatar
Luke Streit
Člen
Avatar
Odpovídá na Zdeněk Lenk
Luke Streit:20.2.2018 11:02

Ten kód co jsi zde zmínil jsem hodil do IDEA a normálně to fungovalo, ale ještě mě napadla jedna věc.

Zkus místo - if(a<=0) dát jenom else - protože ty tím prvním ifem říkáš, že to co je větší než 0, tak ti to odmocninu vypočítá a z toho ti automaticky vyplývá, že když ta podmínka nebude splněna, tak ti to tu odmocninu nevypočte...Ale fungovat by měl i ten kód co jsi zde zmínil...

 
Odpovědět 20.2.2018 11:02
Avatar
Filip Gola
Člen
Avatar
Filip Gola:15.3.2018 11:23

Dobrý deň chcem sa opýať aký je rozdiel medzi príkazom názovScaneru.nex­tLine() a nazovScanneru­.next()

package com.filip;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);
boolean conti = true;
while (conti) {
System.out.prin­tln("Write 3 numbers");
int num1 = scan.nextInt();
int num2 = scan.nextInt();
int num3 = scan.nextInt();
if ((num1 > num2) && (num1 > num3)) {
System.out.prin­tln("The greatest is: " + num1);
} else if ((num2 > num1) && (num2 > num3)) {
System.out.prin­tln("The greatest is: " + num2);

} else {
System.out.prin­tln("The greatest is: " + num3);
}
System.out.prin­tln("Do you want to continue in program? [yes / no]");
String pokracuj = scan.nextLine();
// ked to dam scan.next(); tak to robi to co ma ale chcem vediet preco :)

conti = (pokracuj.equ­alsIgnoreCase("y­es")? true : false);
}

}
}

Editováno 15.3.2018 11:25
 
Odpovědět 15.3.2018 11:23
Avatar
Rasinsky
Člen
Avatar
Rasinsky:26.7.2018 14:04

Scanner.next() precita vstup iba po prvu medzeru, neprecita viac retazcov oddelenych medzerou. A tiez ponecha kurzor na povodnom riadku po precitani, zvysne retazce oddelene medzerou "ostanu" stale nacitane.

Scanner.nextLine() precita cely riadok az do konca, a nastavi kurzor na novy riadok

To s tym nastavovanim kurzoru:
ak pouzijes napr

Scanner sc=new Scanner(System.in);
        System.out.println("zadaj prvy text: ");

        String str1=sc.next();

        System.out.println("Prvy text "+str1);

        System.out.println("zadaj druhy text: ");

        String str2=sc.next();

        System.out.println("druhy text:  "+str2);

        sc.close();

ak v takomto pripade zadas text: aaa bbb, tak ta ani nepusti zadat druhy text, kedze ostane kurzor na tom istom riadku a nacita dalsi retazec po dalsiu medzeru. Vystup by bol v tomto pripade

zadaj prvy text:
aaa bbb
Prvy text aaa
zadaj druhy text:
druhy text: bbb

V tvojom pripade

// ked to dam scan.next(); tak to robi to co ma ale chcem vediet preco :)

to robi to iste lebo ocakavas len jeden retzec / jedno slovo/ ktory kontrolujes [yes / no]

 
Odpovědět 26.7.2018 14:04
Avatar
Karel Klíč
Člen
Avatar
Karel Klíč:15.9.2018 10:37

V tutoriálu větvení v druhém programu vám chybí deklarace nebo definice Scanner sc = new Scanner(System­.in,"Windows-1250"); a pak je metoda volána. Tudíž vyhodí chybu, protože Scanner nemá definovanou proměnou do které data načíst. S pozdravem Karel

 
Odpovědět  +1 15.9.2018 10:37
Avatar
Feri Laky
Člen
Avatar
Feri Laky:17. ledna 19:05

Tiež mi vadilo, keď som musel prepnúť na anglickú klávesnicu, ale dá sa aj tak, že si človek hodí klávesnicu,
ktorú alternatívne potrebuje ma obrazovku a tie znaky zadáva odtiaľ.

 
Odpovědět 17. ledna 19:05
Avatar
Jan Béňa
Člen
Avatar
Jan Béňa:21. února 23:28

Ahoj všem.
Mám takový malí problém když napíši:
If ( a > b)
upozorňuje mě to na chybu " bad operand types for binary operator ´>´ "
A já teď nevím jestli je chyba ve znaménku <> protože If (a == b) to normálně bere bez chyby. Nebo můžu mít chybu někde v programu.
Předem děkuji za jakoukoliv radu.

 
Odpovědět 21. února 23:28
Avatar
Odpovídá na Jan Béňa
Tomáš Novotný:21. února 23:38

to znamená jen to, že neumí/nemůže operátorem > porovnat a, b .. protože jsou typu/druhu, který takové porovnávání neumožňuje... nevím, co přesně umožňuje java, ale například se snažíš porovnat ahoj > čau ? což nedává smysl, ale ahoj == čau ? už porovnat lze...

Odpovědět 21. února 23:38
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Jan Béňa
Člen
Avatar
Odpovídá na Tomáš Novotný
Jan Béňa:22. února 7:54

Děkuji za odpověď.
To dává smysl. Myslel jsem si to. Porovnávám totiž dvě kostky. :D

 
Odpovědět 22. února 7:54
Avatar
Jakub Mainuš:8. srpna 21:53

Super lekce, skvěle vysvětlená.

 
Odpovědět 8. srpna 21:53
Avatar
Víťa Š.
Člen
Avatar
Víťa Š.:26. srpna 21:55

Perfetní kurz!

Odpovědět 26. srpna 21:55
Život by byl mnohem snazší, kdybychom k němu měli zdrojový kód.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 106 zpráv z 106.