Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: int Javan if -lauseessa

Sivun loppuun

hevonen [18.11.2008 23:24:20]

#

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?

Laitinen [18.11.2008 23:30:11]

#

1. if(Eka.oma == 1)
2. Joo

hevonen [18.11.2008 23:34:52]

#

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.

Blaze [18.11.2008 23:42:49]

#

hevonen kirjoitti:

Mielenkiintoista, ettei kaikille primitiivityypeille sovi tuo = -merkki, kuten booleanille.

Mitäköhän mahdat tarkottaa? Kyllä Javassa = on aina sijotus ja == vertailu.

hevonen [18.11.2008 23:55:15]

#

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)

Grez [19.11.2008 02:30:47]

#

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.

hevonen [19.11.2008 04:08:37]

#

@Grez: Hyvä esimerkki!

_Pete_ [19.11.2008 11:55:53]

#

hevonen kirjoitti:

@Grez: Hyvä esimerkki!

Mitä muuten opiskelet Helsingin yliopistossa?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta