NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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í.

Diskuze – Lekce 10 - Cyklus for v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Petr Zajac
gcx11:3.2.2018 19:40

Ahoj, nejčastější použití cyklů je procházení polí/kolekcí a ty se právě indexují od nuly.

for (int i = 0; i < n ; i++) {
    System.out.println(array[i]);
}

namísto

for (int i = 1; i <= n ; i++) {
    System.out.println(array[i-1]);
}

Taktéž opakování kódu se počítá zpravidla od nuly.

Ideálně bys měl ten kód psát tak, aby byl co nejjasnější a nejčitelnější. Takže ten kód, co jsi uvedl, mi přijde v pořádku, možná i krapet lepší, než původní.

Ale většinou ty cykly budeš stejně používat jenom k procházení nějakých polí/kolekcí, proto se hodí indexovat od nuly.

 
Odpovědět
3.2.2018 19:40
Avatar
Jiří Nežerný:18.3.2018 2:45

Krapet jsem násobilku vylepšil, aby výstup lépe vypadal - program před každé číslo přidá tolik mezer, aby byla čísla zarovnaná pod sebou. ;-)

public static void main(String[] args) {
for (int j = 1; j <= 10; j++)
{
for (int i = 1; i <= 10; i++)
{
String vysledek = String.valueOf(i * j);
int pocetMezer = 4 - vysledek.length();
String mezery = "";
for (int k = 0; k < pocetMezer; k++)
{
mezery = mezery + " ";
}
System.out.prin­t(mezery + vysledek);
}
System.out.prin­tln();
}
}

 
Odpovědět
18.3.2018 2:45
Avatar
Jiří Nežerný:18.3.2018 3:27

A ještě jsem vylepšil mocninátor: Jednak jsem do něj zabudoval i cyklus while, jednak jsem jej upravil tak, aby počítal celé mocniny (tj. aby exponent mohl být i 0 nebo záporné číslo), vše za použití doposud probrané látky. Snad to bude někomu jako cvičení k užitku. Budu rád i za diskusi, jak by se to dalo s dosud probranými prostředky udělat elegantněji nebo efektivněji - přiznám se, že jsem nad tím moc nepřemýšlel. ;-) (Vím, že přetypování ve funkci println je zbytečné, že by proběhlo implicitně, prostě si procvičuji konverzi řetězce na číslo. ;-) )

public static void main(String[] args) {
Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.prin­tln("Mocninátor");
System.out.prin­tln("==========");
System.out.prin­tln();
System.out.prin­tln("Počítá celé mocniny celých čísel");
System.out.prin­tln();
String znovu = "a";
while (znovu.equals("a"))
{
System.out.prin­tln("Zadejte základ mocniny: ");
int a = Integer.parse­Int(sc.nextLi­ne());
System.out.prin­tln("Zadejte exponent: ");
int n = Integer.parse­Int(sc.nextLi­ne());
if (n == 0)
{
System.out.prin­tln(String.va­lueOf(a) + "^0 = 1");
}
else
{
float vysledek = a;
int minus = 0;
if (n < 0)
{
minus = 1;
n = -n;
}
for (int i = 0; i < n - 1; i++)
{
vysledek = vysledek * a;
}
if (minus == 1)
{
vysledek = 1 / vysledek;
}
System.out.prin­tln("an = " + String.valueOf(vys­ledek));
}
System.out.prin­tln("Další výpočet (a/n)?");
znovu = sc.nextLine();
}
System.out.prin­tln();
System.out.prin­tln("Děkuji za použití mocninátoru.");
System.out.prin­tln();
}

 
Odpovědět
18.3.2018 3:27
Avatar
Odpovídá na Jiří Nežerný
Jiří Nežerný:18.3.2018 3:53

Ehm... Dá se už napsaný komentář smazat? :-/

Pokud ne, slibuji, že si příště nejprve pročtu diskusi (námět na sepsání kódu na výpočet mocniny se záporným, a dokonce i desetinným exponentem tam zazněl, a mé řešení je poměrně triviální), že si pořádně rozmyslím, jestli to má smysl, a že se naučím dávat delší kódy jinam. ;-)

 
Odpovědět
18.3.2018 3:53
Avatar
Josef Pospíšil:28.3.2018 14:58

Tohle byla výborná lekce, jen když jsem ji procházel poprvé, tak 2 cykly v sobě:

for (int j = 1; j <= 10; j++)
{
        for (int i = 1; i <= 10; i++)
        {
                System.out.print((i * j) + " ");
        }
        System.out.println();
}

byly dost těžké (z mého pohledu) na pochopení.
Tu by to možná chtělo trochu rozepsat, co se děje v jednotlivých krocích.
Já si tam pak přidal řádky abych to zjistil, ale než jsem to udělal, byl jsem z toho trochu zoufalý.
To detailnější rozepsání by to bylo lepší na pochopení (je to z pohledu úplného začátečníka), jinak to bylo dost fajn.

Editováno 28.3.2018 15:01
 
Odpovědět
28.3.2018 14:58
Avatar
Jiří Malý
Člen
Avatar
Jiří Malý:18.7.2018 10:39

Super! Ještě jsem si upravil kalkulačku abych mohl psát rovnou znaménka namísto čísel

if (volba.equals("+"))
{
vysledek = a + b;
}
else if (volba.equals("-"))
{
vysledek = a - b;
}
else if (volba.equals("*"))
{
vysledek = a * b;
}
else if (volba.equals("/"))
{
vysledek = a / b;
}

 
Odpovědět
18.7.2018 10:39
Avatar
Rasinsky
Člen
Avatar
Odpovídá na Josef Pospíšil
Rasinsky:26.7.2018 12:25
for (int j = 1; j <= 10; j++)
{
        for (int i = 1; i <= 10; i++)
        {
                System.out.print((i * j) + " ");
        }
        System.out.println();
}

Pre jednoduchsie pochopenie si to rozdel napr takto:
Vonkajsi / hlavny cyklus A (v tomto priklade s premennou j)
Vnutorny / vnoreny cyklus B (v tomto priklade s premennou i)

Cyklus A
{
//telo cyklu A ktory sa vykona podla podmienky
        Cyklus B
        {
        //telo cyklu B ktory sa vykona podla podmienky
        }
}

Takze ked zacne cyklus A, pokial podmienka plati (otestuje sa j <= 10) vykona sa telo cyklu, pre prvu hodnutu j.

V tomto priklade sa vykona dalsi cyklus B, kedze je v tele cyklu / je vnoreny do A.
Cyklus B sa bude vykonavat pokial podmienka plati (otestuje sa i <=10), pre vsetky hodnoty i sa vykona telo cyklu B. (i sa inkrementuje po kazdom vykonani tela cyklu, na to sluzi i++ )

Nasledne sa cyklus "vrati" na zaciatok A, kedze cele telo cyklu A bolo vykonane.
A znovu sa otestuje podmienka pre dalsiu hodnotu j (j sa inkrementuje po kazdom vykonani tela cyklu, na to sluzi j++ ), pokial podmienka plati ide sa znovu na telo cyklu A - cize opat sa vykonava cyklus B, a tak dookola pokial podmienka plati.

Dufam ze je to jasnejsie takto :)
alebo si to skus takto vypisat

for (int j = 1; j <= 10; j++)
                {
                        for (int i = 1; i <= 10; i++)
                        {
                                System.out.printf(" j= %d i= %d",j,i );
                        }
                        System.out.println();
                }
 
Odpovědět
26.7.2018 12:25
Avatar
Karel Klíč
Člen
Avatar
Karel Klíč:17.10.2018 16:59

Opět ta samá chyba v žebříkovém programování podmínky if a else kalkulačky zdrojového kódu vám chybí inicializace objektu Scanner na proměnnou sc. Divím se že ze stránek vám to jede. při okopírování ctrl + c a ctrl + v je program nefunkční.

 
Odpovědět
17.10.2018 16:59
Avatar
Feri Laky
Člen
Avatar
Odpovídá na Josef Pospíšil
Feri Laky:17.1.2019 19:30

Ano, pre začiatok, ak človek len začína s prvým programovacím jazykom je ten algoritmus
skoro nepochopiterľný, teda aspoň ťažko.Akonáhle človek v minulosti načal nejaký jazyk,
hneď je na tom lepšie.Ja som asi pred 20-25 rokmi programoval v Pascale, a napriek dlhej dobe
mi teraz dva cykly nerobia problém na pochopenie.
Veľmi vychutnávam, ako vďaka dobrým príkladom lezú z hlavy staré znalosti.
Čo sa za mladi naučíš, na starosť akoby si našiel :-)))

 
Odpovědět
17.1.2019 19:30
Avatar
Marcel Mares
Člen
Avatar
Marcel Mares:19.8.2019 17:28

kde se mohu dovědět, jak se používá v javě cyklus do-while

 
Odpovědět
19.8.2019 17:28
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 151.