Narazil som na problém ktorý pochoval všetky moje predstavy o cyklení.Hladal som na internete nejaké vysvetlenie ale nikde to nie je nejak popisané takže to skúsim tu.
jedná sa napr. o takýto kód
for(int n = 0; n<2; n++){
for(int m = 0; m<2; m++){
System.out.println(n + "-" + m + " ");
}
}
ktorý vyzerá jednoducho ale zložito píše:)
Vypíše niečo takéto
0-0
0-1
1-0
1-1
moc tomu nerozumiem že prečo zrovna takto.Tie prvé dve nuly sú mi jasné ale prečo nasleduje zase potom nula?
for(int n = 0; n<2; n++){
for(int m = 0; m<2; m++){
System.out.println(n + "-" + m + " ");
}
}
Nevim jake predstavy mas o cykleni, ale chova se to naprosto korektne. Cyklus proste spousti obsah sveho bloku dokud plati podminka. A pokud je uvnitr dalsi cyklus tak se spousti opakovane ten...
Mozna nahodit trosku "vhodnejsi" odsazovani abys to videl
A popis? Vstoupi se do vnejsiho cyklu s 0 v n, pak se spusti vnitrni ktery ma postupne 0 a 1
vyskoci se z vnitrniho cyklu a ted prekvapive zacne cyklit zase vnejsi... ted si uvnitr s 1 v n
a jelikoz je uvnitr porad ten vnitrni cyklus, tak zase 0 a 1
Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Diki za odpoved, uz som pochopil ten algorytmus a mozno to je zbytocne ale napisem to sem s tym ze snad sa to raz niekomu hodi.
Najprv sa n priradi hodnota 0, skontroluje sa podmienka ci n<2 ak to plati, ide sa dalej na vnutorny cyklus.Tam sa spravi to iste.Priradi sa premennej m hodnota 0, skontroluje sa ci m<2 ak to plati, vypise sa n a m cize 0-0.
Teraz sa pokracuje od vnutorneho cyklu pokial plati podmienka m < 2.Ak to plati tak sa m zvacsi o 1 cize teraz sa m=1 a n=0, vypise sa teda 0-1.Zase sa snazi program pokracovat od vnutorneho cyklu, ale kedze m = 1 a plati podmienka ze m<2, tak m sa o hodnotu 1 uz nenavysi a vnutorny cyklus konci.Pokracuje sa od zaciatku(od vonkajsieho cyklu) a kedze premennej n uz nula priradena bola a plati podmienka n<2 tak n uz zvysi svoju hodnotu na 1.Ide sa na vnutorny cyklus kde sa zacina zase odznova cize premennej m sa priradi 0 a ak plati m<2 tak program vypise 1-0.Zase sa zacina od vnutorneho cyklu.Skontroluje sa podmienka ci m<2 a ak je tak m zvysi svoju hodnotu o 1.Kedze n uz ma od predchazajuceho vypisu hodnotu 1 a teraz ma aj m hodnotu 1, program vypise 1-1.Kedze m musi byt mensie ako 2, o dalsiu hodnotu sa uz nenavysi a vnutorny cyklus konci.Pokracuje sa vonkajsim cyklom, ale kedze n ma tiez podmienku ze ma byt mensie ako 2, tak sa tiez uz nenavysi a vonkajsi cyklus konci a tym padom aj cely program.
Teraz sa pokracuje od vnutorneho cyklu pokial plati podmienka m < 2.Ak to plati tak sa m zvacsi o 1
nejprve se pricte jedna, pak se teprve kontroluje...
tj. kdyz se do cyklu vejde, tak se provede prvni cast foru (inicializace) a pak zkontroluje podminka...
ve vsech dalsich kolech se vykona treti cast foru (inkrementace/dekrementace (ci presneji "zmena" ridici promenne)) a pak se zkontroluje podminka - pokud stale plati tak se provede blok { } (pripadne jeden jediny prikaz pokud nemas blok)
Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...