Koodi on tämä:
class Eka { private int oma=1; public static void main(String[] args){ Eka Eka = new Eka(); if(Eka.oma=1) System.out.println("JEE"); } }
Kääntäjän mukaan "boolean [is] required" in if -clause. Eli virhettä antaa.
1. Kuinka siis edellisen if lauseen voi toteuttaa Javassa? Ehkä pitää luoda boolean -muuttuja ja sitä käyttää for -silmukassa.
2. Toimiiko C++:n if -silmukka samoin kuin Javan?
1. if(Eka.oma == 1)
2. Joo
Laitinen kirjoitti:
1. if(Eka.oma == 1)
Kiitos!
Mielenkiintoista, ettei kaikille primitiivityypeille sovi tuo = -merkki, kuten booleanille.
Onko Javassa muitakin tyyppejä, joille käy vain == -merkki, eikä = -merkki? Itse arvelisin, että ainakin byte, long, String, double ja float ovat sellaisia.
hevonen kirjoitti:
Mielenkiintoista, ettei kaikille primitiivityypeille sovi tuo = -merkki, kuten booleanille.
Mitäköhän mahdat tarkottaa? Kyllä Javassa = on aina sijotus ja == vertailu.
Blaze kirjoitti:
Mitäköhän mahdat tarkottaa? Kyllä Javassa = on aina sijotus ja == vertailu.
Sitä, että kääntäjä sallii nämä molemmat koodit mainissa:
-- private boolean oikein=true; public static void main(String[] args){ Eka Eka = new Eka(); if(Eka.oikein==true) --
ja
-- public static void main(String[] args){ Eka Eka = new Eka(); if(Eka.oikein=true) --
Ilmeisesti if -lauseessa voi tehdä sijoituksen. Tuo yksityiskohta luultavasti johtuu siitä, että if -lauseessa tämä
if(Eka.oikein)
tulkitaan täksi
if(Eka.oikein==true)
hevonen kirjoitti:
Blaze kirjoitti:
Mitäköhän mahdat tarkottaa? Kyllä Javassa = on aina sijotus ja == vertailu.
Sitä, että kääntäjä sallii nämä molemmat koodit mainissa:
Java, C, PHP, jne. palauttavat sijoituksessa sijoitetun arvon, eli jos b on boolean ja kirjoitat b = true, niin se sijoittaa b:hen arvon true ja palauttaa true. Eli siis saat aina true, riippumatta siitä, mikä b:n arvo oli ennen tuota.
Sen sijaan jos kirjoitat b == true, niin b:n arvo ei muutu ja saat true vain jos b oli true. Tosin tässähän ei ole paljon järkeä, koska b on jo itsessään boolean, niin sitä voi käyttää suoraankin. Myöskin b == false tilalla käytetään yleensä !b
Jos taas b on int, niin b = 1 palauttaa 1, joka ei kelpaa Javassa if-lauseelle, koska se haluaa booleanin. Jos tarkoituksesi on sijoittaa b:n arvoksi 1 ja tarkastaa, onko se sen jälkeen 1, niin voit toki kirjoittaa if ((b=1)==1), jolloin saat aina true.
@Grez: Hyvä esimerkki!
hevonen kirjoitti:
@Grez: Hyvä esimerkki!
Mitä muuten opiskelet Helsingin yliopistossa?
Aihe on jo aika vanha, joten et voi enää vastata siihen.