NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 8 - Podmínky (větvení) v Javě

V předešlém cvičení, Řešené úlohy k 6.-7. lekci Javy, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Abychom si mohli něco naprogramovat, 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. Tomu se říká, že se program větví. K větvení používáme podmínky, kterým se budeme věnovat celý dnešní Java tutoriál. Vytvoříme si program na výpočet odmocniny a vylepšíme naši kalkulačku.

Podmínky – if

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, program následující příkaz přeskočí a pokračuje až pod ním. Příkazy píšeme vždy do složených závorek. Vyzkoušejme si to:

Klikni pro editaci
  • if (15 > 5) {
        System.out.println("Pravda");
    }
    System.out.println("Program zde pokračuje dál");
    
    • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

      Pokud tvá aplikace vyžaduje vstup od uživatele, musíš použít Scanner a proměnná se musí jmenovat buďto scanner nebo sc.

    Výstup programu:

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

    Pokud podmínka platí (což v našem případě 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á:

    Klikni pro editaci
    • Scanner scanner = new Scanner(System.in);
      System.out.println("Zadej nějaké číslo");
      int cislo = Integer.parseInt(scanner.nextLine());
      if (cislo > 5) {
          System.out.println("Zadal jsi číslo větší než 5!");
      }
      System.out.println("Děkuji za zadání");
      
      • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

        Pokud tvá aplikace vyžaduje vstup od uživatele, musíš použít Scanner a proměnná se musí jmenovat buďto scanner nebo sc.

      Relační operátory

      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 nespletla 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.

      Blok příkazů

      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:

      Klikni pro editaci
      • Scanner scanner = new Scanner(System.in);
        System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
        int zaklad = Integer.parseInt(scanner.nextLine());
        if (zaklad >= 0) {
            System.out.println("Zadal jsi číslo větší nebo rovno 0, to znamená, že ho mohu odmocnit!");
            double odmocnina = Math.sqrt(zaklad);
            System.out.println("Odmocnina z čísla " + zaklad + " je " + odmocnina);
        }
        System.out.println("Děkuji za zadání");
        
        • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

          Pokud tvá aplikace vyžaduje vstup od uživatele, musíš použít Scanner a proměnná se musí jmenovat buďto scanner nebo sc.

        Po spuštění programu a zadání hodnot bude výstup vypadat takto:

        Konzolová aplikace
        Zadej nějaké číslo, ze kterého spočítám odmocninu:
        144
        Zadal jsi číslo větší nebo rovno 0, to znamená, že ho mohu odmocnit!
        Odmocnina z čísla 144 je 12.0
        Děkuji za zadání

        Nezapomeňte si naimportovat java.util.Scanner, aby program znal třídu Scanner.

        Často můžeme 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ší.

        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, které si blíže představíme později v kurzu. Metoda sqrt() vrací hodnotu jako double.

        Větev else

        Bylo by dobré, kdyby nám program vyhuboval v případě, že zadáme záporné číslo. S dosavadními znalostmi bychom napsali něco jako:

        Klikni pro editaci
        • Scanner scanner = new Scanner(System.in);
          System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
          int zaklad = Integer.parseInt(scanner.nextLine());
          if (zaklad >= 0) {
              System.out.println("Zadal jsi číslo větší nebo rovno 0, to znamená, že ho mohu odmocnit!");
              double odmocnina = Math.sqrt(zaklad);
              System.out.println("Odmocnina z čísla " + zaklad + " je " + odmocnina);
          }
          if (zaklad < 0) {
              System.out.println("Odmocnina ze záporného čísla neexistuje v oboru reálných čísel!");
          }
          System.out.println("Děkuji za zadání");
          
          • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

            Pokud tvá aplikace vyžaduje vstup od uživatele, musíš použít Scanner a proměnná se musí jmenovat buďto scanner nebo sc.

          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:

          Klikni pro editaci
          • Scanner scanner = new Scanner(System.in);
            System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
            int zaklad = Integer.parseInt(scanner.nextLine());
            if (zaklad >= 0) {
                System.out.println("Zadal jsi číslo větší nebo rovno 0, to znamená, že ho mohu odmocnit!");
                double odmocnina = Math.sqrt(zaklad);
                System.out.println("Odmocnina z čísla " + zaklad + " je " + odmocnina);
            }
            else {
                System.out.println("Odmocnina ze záporného čísla neexistuje v oboru reálných čísel!");
            }
            System.out.println("Děkuji za zadání");
            
            • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

              Pokud tvá aplikace vyžaduje vstup od uživatele, musíš použít Scanner a proměnná se musí jmenovat buďto scanner nebo sc.

            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 za else následoval opět blok { }.

            Klíčové slovo 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 proměnnou tedy ptát znovu. Program si sám pamatuje, že se podmínka nesplnila, a přejde do sekce else. Ukažme si to na příkladu.

            Prohození hodnot proměnné

            Mějme proměnnou cislo, která bude mít hodnotu 0 nebo 1. Po nás se bude chtít, abychom hodnotu prohodili (bude-li hodnota 0, dosadíme místo ní 1, bude-li 1, dosadíme 0). Naivně bychom mohli kód napsat takto:

            Klikni pro editaci
            • int cislo = 0; // do proměnné si přiřadíme na začátku 0
              
              if (cislo == 0) { // pokud je cislo 0, dáme do něj jedničku
                  cislo = 1;
              }
              if (cislo == 1) { // pokud je cislo 1, dáme do něj nulu
                  cislo = 0;
              }
              
              System.out.println(cislo);
              
              • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

                Pokud tvá aplikace vyžaduje vstup od uživatele, musíš použít Scanner a proměnná se musí jmenovat buďto scanner nebo sc.

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

              Klikni pro editaci
              • int cislo = 0; // do proměnné si přiřadíme na začátku 0
                
                if (cislo == 0) { // pokud je cislo 0, dáme do něj jedničku
                    cislo = 1;
                }
                else { // pokud je cislo 1, dáme do něj nulu
                    cislo = 0;
                }
                
                System.out.println(cislo);
                
                • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

                  Pokud tvá aplikace vyžaduje vstup od uživatele, musíš použít Scanner a proměnná se musí jmenovat buďto scanner nebo sc.

                Program máte samozřejmě opět v příloze. Zkoušejte si vytvářet nějaké podobné, znalosti již k tomu máte :)

                V příští lekci, Podmínky (větvení) podruhé - Konstrukce switch v Javě, se naučíme skládat podmínky pomocí logických operátorů. Dále se podíváme na využití konstrukce switch.


                 

                Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

                Stáhnout

                Stažením následujícího souboru souhlasíš s licenčními podmínkami

                Staženo 1329x (33.11 kB)
                Aplikace je včetně zdrojových kódů v jazyce Java

                 

                Jak se ti líbí článek?
                Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
                Předchozí článek
                Řešené úlohy k 6.-7. lekci Javy
                Všechny články v sekci
                Základní konstrukce jazyka Java
                Přeskočit článek
                (nedoporučujeme)
                Podmínky (větvení) podruhé - Konstrukce switch v Javě
                Článek pro vás napsal David Hartinger
                Avatar
                Uživatelské hodnocení:
                1133 hlasů
                David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
                Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
                Aktivity