Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde

Cvičení k 7. lekci Javy

Java Základní konstrukce Cvičení k 7. lekci Javy American English version English version

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

Následující 3 cvičení vám pomohou procvičit znalosti programování v Javě z minulé lekce. Ve vlastním zájmu se je pokuste vyřešit sami. Pod článkem máte pro kontrolu řešení ke stažení. Ale pozor, jakmile se na něj podíváte bez vyřešení příkladů, ztrácí pro vás cvičení smysl a nic se nenaučíte :)

Pokud si opravdu nebudete vědět rady, podívejte se raději znovu do minulého tutoriálu a pokuste se na to přijít.

Jednoduchý příklad

Vytvořte program, který naplní pole o deseti prvcích postupně čísly od 10 do 1. Pole následně vypište pomocí cyklu foreach.

Ukázka obrazovky programu:

Pole10
10
9
8
7
6
5
4
3
2
1

Středně pokročilý příklad

Vytvořte program, kterému zadáte slovo a on zjistí, zda je to název ovoce nebo zeleniny. Pokud tedy zadáme např. malina, vypíše, že se jedná o ovoce. Pokud brokolice, vypíše, že se jedná o zeleninu. Na velikosti písmen nezáleží. Program samozřejmě rozpozná několik slov a pokud narazí na slovo, které není definované, tak na tuto skutečnost uživatele upozorní. Vyhněte se použití složitého větvení a místo toho použijte pole.

Program se stále opakuje v cyklu dokud ho neukončíme. Před ukončení program vypíše na kolik slov jsme se ho zeptali. Pro lepší pochopení je vše názorně ukázáno na obrázku níže.

Program naučte rozeznávat alespoň tyto plodiny:

  • Zeleninu: zelí, okurka, rajče, paprika, ředkev, mrkev, brokolice
  • Ovoce: jablko, hruška, pomeranč, jahoda, banán, kiwi, malina

Ukázka obrazovky programu:

Zelenina
Zadej název libovolného ovoce nebo zeleniny:
Malina
Zadal jsi ovoce
Přeješ si zadat další slovo? (ano/ne)
ano
Zadej název libovolného ovoce nebo zeleniny:
brokolice
Zadal jsi zeleninu
Přeješ si zadat další slovo? (ano/ne)
ano
Zadej název libovolného ovoce nebo zeleniny:
traktor
Tvoje slovo nemám v seznamu
Přeješ si zadat další slovo? (ano/ne)
ne
Zadal jsi 3 slov

import java.util.Arrays;

Pokročilý příklad

Vytvořte program, který si nechá na vstupu zadat několik čísel (jejich počet si zvolí uživatel) a z těchto čísel následně vypočítá medián. Pro každé zadané číslo vypíše jeho odchylku od tohoto mediánu. U mediánu zanedbejte fakt, že se při sudém počtu prvků průměruje z prostředních dvou, k jeho určení tedy pouze sáhněte na prostřední index, získaný jako délka / 2;

Ukázka obrazovky programu:

Odchylka
Zadej počet čísel:
5
Zadej 1. číslo: 3
Zadej 2. číslo: 8
Zadej 3. číslo: 6
Zadej 4. číslo: 1
Zadej 5. číslo: 7
3 se od mediánu odchyluje o -3.000000
8 se od mediánu odchyluje o 2.000000
6 se od mediánu odchyluje o 0.000000
1 se od mediánu odchyluje o -5.000000
7 se od mediánu odchyluje o 1.000000

import java.util.Arrays;

 

Stáhnout

Staženo 1124x (49.86 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?
16 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.
Miniatura
Předchozí článek
Pole v Javě
Miniatura
Všechny články v sekci
Základní konstrukce jazyka Java
Aktivity (13)

 

 

Komentáře
Zobrazit starší komentáře (65)

Avatar
brevnovak
Člen
Avatar
brevnovak:13. října 0:30

tohle mi troskota na 50%. u me na pc to facha jak vino. netusite, kde muze byt problem?
dik :)

String[] ovoce = {"malina", "jahoda", "jablko"};
        String[] zelenina = {"brokolice", "brambora","paprika"};
        String pokracuj = "ano";
        String vstup;
        int count = 0;
        boolean nasel = false;
        Scanner sc = new Scanner (System.in, "Windows-1250");
        while (pokracuj.equals("ano"))
        {
            System.out.println("Zadej název libovolného ovoce nebo zeleniny:");
            vstup=sc.nextLine();
            for (String s :ovoce)
                if (s.equals(vstup))
                {
                    System.out.println("Zadal jsi ovoce");
                    nasel = true;
                }
            if (nasel==false)
                for (String s :zelenina)
                    if (s.equals(vstup))
                    {
                        System.out.println("Zadal jsi zeleninu");
                        nasel = true;
                    }
            if (nasel==false)
                System.out.println("Tvoje slovo nemám v seznamu");
            System.out.println("Přeješ si zadat další slovo? (ano/ne)");
            pokracuj=sc.nextLine();
            count++;
        }
        System.out.printf("Zadal jsi %d slov",count);
 
Odpovědět 13. října 0:30
Avatar
LeenaNap
Člen
Avatar
Odpovídá na brevnovak
LeenaNap:13. října 9:30

Ahoj, tvůj kód vůbec nehledá v zelenině. Nemáš uzavřený for cyklus u ovoce. Snad jsem trochu pomohla ;-)

 
Odpovědět 13. října 9:30
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na brevnovak
David Jančík:13. října 10:04

Máš v programu chybu. Zkus si zadat manuálně více slov a zkus i taková, která v seznamu nejsou.
Doplnil jsem k příkladu seznam ovoce a zeleniny, doplň si je do svého seznamu.
V zadání se píše

Na velikosti písmen nezáleží.

Odpovědět 13. října 10:04
Čím více času dostaneš, tím méně ho máš.
Avatar
brevnovak
Člen
Avatar
Odpovídá na David Jančík
brevnovak:13. října 15:54

diky, uz to facha. bez toho konkretniho seznamu se vam to asi dost blbe kontrolovalo, ne..? ;)

 
Odpovědět  +1 13. října 15:54
Avatar
Jakub Říman:18. října 20:38

Tak nevím, u mě mi to funguje normálně tak, jak má. Tady to háže chybovou hlášku:

package ovocezelenina;

import java.util.Scanner;
import java.util.Arrays;
public class OvoceZelenina {

public static void main(String[] args) {
Scanner sc = new Scanner (System.in, "Windows-1250");
String[] ovoce = {"jablko" , "hruška","banán","po­meranč","jaho­da", "malina", "kiwi"};
String[] zelenina = {"rajče" , "okurka" , "paprika" , "ředkev" , "mrkev" , "zelí" , "brokolice"};
Arrays.sort(ovoce);
Arrays.sort(ze­lenina);

String pokracovat = "ano";
int pocetcyklu = 0;

while (pokracovat.e­quals("ano"))
{
System.out.prin­tln("Zadej název libovolného ovoce nebo zeleniny: ");
String vstup = sc.nextLine();
vstup = vstup.toLower­Case();
int overeniOvoce = Arrays.binary­Search(ovoce, vstup);
int overeniZelenina = Arrays.binary­Search(zeleni­na, vstup);
if ((overeniOvoce >=0))
{
System.out.prin­tln("Zadal jsi ovoce");
}
else if ((overeniZelenina >=0))
{
System.out.prin­tln("Zadal jsi zeleninu");
}
else
{
System.out.prin­tln("Tvoje slovo nemám v seznamu");
}
System.out.prin­tln("Přeješ si zadat další slovo? (ano/ne)");
pokracovat = sc.nextLine();
if (pokracovat.e­quals("ano"))
{
pocetcyklu=po­cetcyklu + 1;
}
}
System.out.prin­tf("Zadal jsi %d slov", pocetcyklu + 1);
}

}

Cyklus proběhne jednou a pak to hodí: Exception in thread "main" java.util.NoSuchE­lementExcepti­on: No line found
at java.util.Scan­ner.nextLine(Scan­ner.java:1540)
at hardcore.Henry­.readLine(Hen­ry.java:1)
at onlineapp.Pro­gram.main(Pro­gram.java:26)

 
Odpovědět 18. října 20:38
Avatar
Jakub Říman:19. října 17:20

až na to počítadlo zadání to mám úplně stejně :-).

 
Odpovědět 19. října 17:20
Avatar
Michal Navrátil:23. října 19:52
Scanner sc = new Scanner(System.in, "Windows-1250");

        String[] ovoce = {"jablko", "hruška", "pomeranč", "jahoda", "banán", "kiwi", "malina"};
        String[] zelenina = {"zelí", "okurka", "rajče", "paprika", "ředkev", "mrkev", "brokolice"};
        Arrays.sort(ovoce);
        Arrays.sort(zelenina);

        String pokracovat = "ano";
        int opakovani = 0;

    while (pokracovat.equals("ano"))
    {
        System.out.println("Zadej název libovolného ovoce nebo zeleniny:");
        String slovo = sc.nextLine().trim().toLowerCase();

        int TestOvoce = Arrays.binarySearch(ovoce, slovo);
        int TestZelenina = Arrays.binarySearch(zelenina, slovo);

            if (TestOvoce >= 0 )
                System.out.println("Zadal jsi ovoce");
            else if (TestZelenina >= 0)
                System.out.println("Zadal jsi zeleninu");
            else
                System.out.println("Tvoje slovo nemám v seznamu");

        System.out.println("Přeješ si zadat další slovo? (ano/ne)");
        pokracovat = sc.nextLine().trim().toLowerCase();
        opakovani += 1;
    }

    System.out.printf("Zadal jsi %d slov", opakovani);
 
Odpovědět 23. října 19:52
Avatar
Michal Navrátil:23. října 20:43

Nějak mi do komentáře neprošel text :-(
Dotazy ke druhému příkladu:

  1. Proč mi TestOvoce nabývá při zadání zeleniny (zdánlivě) libovolných záporných hodnot místo -1?
  2. Je výhodnější použít třídu Arrays nebo cyklus foreach?
Scanner sc = new Scanner(System.in, "Windows-1250");

        String[] ovoce = {"jablko", "hruška", "pomeranč", "jahoda", "banán", "kiwi", "malina"};
        String[] zelenina = {"zelí", "okurka", "rajče", "paprika", "ředkev", "mrkev", "brokolice"};
        Arrays.sort(ovoce);
        Arrays.sort(zelenina);

        String pokracovat = "ano";
        int opakovani = 0;

    while (pokracovat.equals("ano"))
    {
        System.out.println("Zadej název libovolného ovoce nebo zeleniny:");
        String slovo = sc.nextLine().trim().toLowerCase();

        int TestOvoce = Arrays.binarySearch(ovoce, slovo);
        int TestZelenina = Arrays.binarySearch(zelenina, slovo);

            if (TestOvoce >= 0 )
                System.out.println("Zadal jsi ovoce");
            else if (TestZelenina >= 0)
                System.out.println("Zadal jsi zeleninu");
            else
                System.out.println("Tvoje slovo nemám v seznamu");

        System.out.println("Přeješ si zadat další slovo? (ano/ne)");
        pokracovat = sc.nextLine().trim().toLowerCase();
        opakovani += 1;
    }

    System.out.printf("Zadal jsi %d slov", opakovani);
 
Odpovědět 23. října 20:43
Avatar
Fíla N.
Člen
Avatar
Fíla N.:5. listopadu 21:42

Ahoj,
přijde mi, že pokročilý příklad projde odevzdáním i případě, že si nesrovnáte pole. Podle vašich testů zřejmě vyjde prostřední prvek vždy jako medián. Např. v zadání je 3. číslo rovno 6. Náhodou zrovna hledané číslo...
Alespoň mi to tak přijde :-)

Díky

 
Odpovědět 5. listopadu 21:42
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Fíla N.
David Jančík:6. listopadu 6:49

Máš pravdu, díky za feedback. Testy byly rozšířeny.

Odpovědět  +1 6. listopadu 6:49
Čím více času dostaneš, tím méně ho máš.
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 10 zpráv z 75. Zobrazit vše