Allaoleva koodi tulostaa seuraavaa rivinvaihdoilla: 1, 2, 4, 7, 11 jne…
Miksi eka tulostuva luku on 1, vaikka koodissa on i =j
Oletin siitä tulevan kakkosen ekana lukuna
public class kakkonenOma
{
public static void main(String[] args)
{
int j = 1;
int i = 1;
while (j
Miksi eka tulostuva luku on 1, vaikka koodissa on i =j
Oletin siitä tulevan kakkosen ekana lukuna
public class kakkonenOma
{
public static void main(String[] args)
{
int j = 1;
int i = 1;
while (j
Vastaukset 7
Vanhimmat
Eka luku on ykkönen koska sinulla on asetus i=1 ja sen jälkeen, ennen tulostusta, arvoa ei muuteta.
Joo sen i:n ymmärrän, kun ne plussat ovat jäljessä, mutta...
Miksi se j ei vaikuta siihen tulokseen.
Kun j on alustettu jo ykköseksi, niin minusta sen pitäis vaikuttaa siihen summaan, mutta kun ei...
ei mene kaaliin
Koitanpa selittää miten tämä menee..
Eka kiekalla i on yksi alkuasetuksen mukaan.
Eka kiekan lopussa i:n arvoa nostetaan j:n arvolla(joka on 1), jonka jälkeen j:n arvoa nostetaan yhdellä.
Toisella kiekalla i:n arvo on kaksi.
Toisen kiekan lopussa i:n arvoa nostetaan j:n arvolla(joka on nyt 2), jonka jälkeen j:n arvoa nostetaan yhdellä.
Kolmannella kiekalla i:n arvo on siis neljä.. ja sitä rataa.
Ehkä nyt ihmettelet tuon i =j laskemista?
Kun on muuttujan nimen perässä, korottaminen tapahtuu vasta JÄLKEENPÄIN kun muuttujan arvoa on käytetty. Jos on muuttujan nimen edellä, korotus tehdään ENNEN arvon käyttämistä.
Sen sijaan että tulostat pelkän i:n niin tulosta myös j. Lisäksi pura i = j ; seuraavaan muotoon:
===================================================
i=i j;
j ;
===================================================
Tuo sanoo että i:hin lisätään joka kierroksella kasvava luku 1,2,3...
1
1 1=2
2 2=4
4 3=7
7 4=11
En nyt tiedä osunko oikeaan mutta kai tiedät että "i = j ;" on eri asia kuin "i = j;". Eli kun on j:n edessä niin tällöin kasvatetaan j:tä ekaksi ja sitten otetaan uusi arvo laskuun mukaan, kun taas jos on j:n jäljessä niin tällöin j:n sen hetkinen arvo otetaan laskuun mukaan ja kasvatus tehdään vasta sen jälkeen...
Printtaat i:n ennenkuin lisäät siihen mitään. Tällöin ensimmäinen printattava arvo on alustusarvo, eikö?
Kirjoita ensin se koodi muotoon
i=i j
(se plussa i:n perässä vie ajattelun harhaan)
Sitten tunget koodin vaikka BlueJ:n debuggeriin ja ajat vaiheittain, niin asia selviää.
(näin minä näitä alkeita opettelen...)