while-silmukkan ihmeet

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
7569
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

Eka luku on ykkönen koska sinulla on asetus i=1 ja sen jälkeen, ennen tulostusta, arvoa ei muuteta.

Äänestä
  • 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

    Äänestä

  • sanaXXX kirjoitti:

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

    Äänestä

  • sanaXXX kirjoitti:

    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

    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

    Äänestä

  • sanaXXX kirjoitti:

    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

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

    Äänestä

Printtaat i:n ennenkuin lisäät siihen mitään. Tällöin ensimmäinen printattava arvo on alustusarvo, eikö?

Äänestä

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

Äänestä

Kommentoi aloitusta


AloittelijaXXX kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu