Ilkka Koivistoinen 13.02.2002

Edellinen

Seuraava

5. 3 Arvonmuutosoperaattorit

Arvonmuutosoperaattoreilla on tarkoitus nopealla suorituksella muuttaa luvun arvoa yhdellä, ottaa luvusta vastaluku (keroo -1:llä) tai kertoa/jakaa luku toisella luvulla. Opetteluvaiheessa kannattaa jättää arvonmuutosoperaattorit merkitsemättä ja korvata ne selväkielisellä sijoituslauseella. Arvonmuutosoperaattoreilla on monesti koodia nopeuttava mutta lukemista sotkeva vaikutus.

Arvonmuutosoperaattorit ovat

Operaattori Merkitys Esimerkki Selvennys
 
++ lisää yksi i ++ i=i+1
-- vähennä yksi i-- i=i-1
+= lisää luku a+=256 a=a+256
-= vähennä luku a-=15 a=a-15
*= kerro luku r*=3 r=r*3
/= jaa luku r/=4 r=r/4

Arvonmuutosoperaattorit voi "selvyyden välttämiseksi" sijoittaa ennen tai jälkeen muuttujan. (Vihje! Älä käytä arvonmuutosoperaattoreita, jotta varmasti tiedät mitä koodi tekee)

Olkoot x=5. Sijoitus y=x++ aiheuttaa sen, että y saa x:n arvon ja lisää siihen yhden. Tulokseksi saadaan x=6 ja y=5. Sen sijaan y=++x aiheuttaa sen, että ensin x:n arvoa lisätään yhdellä ja sitten y saa x:n arvon. Siis (jos x oli alun perin 5) x=6 ja y=6. Huomaat eron!

Esimerkki 12b

import Lue;
public class e12b
{    // kokeillaan a++ ja ++a operaatiooiden eroa
   public static void main(String args[])
   {
       int a=0,b;
       System.out.println("Anna kokonaisluku");
       a = Lue.kluku();
       b = a++;
       System.out.println("a++ jalkeen a = "+a+" b  = "+b);
       b = ++a;
       System.out.println("++a jalkeen a = "+a+" b  = "+b);
   }
}

 

5.4 Vertailuoperaattorit

Vertailuoperaattoreita tarvitaan silloin, kun muuttujia joudutaan vertaamaan toisiinsa. Vertailuoperaattorit ovat

Operaattori Merkitys Esimerkki
== yhtäsuuruus i==5
!= erisuuruus s!="Moikka"
> suurempi kuin x>100.0
< pienempi kuin
>= suurempi tai yhtäsuuri
<= pienempi tai yhtäsuuri

5.5 Loogiset operaattorit

Loogisia operaattoreita käytetään erilaisten vertailujen yhdistelemiseen niitä tarvitaan toistorakenteissa ja niihin palataan siinä yhteydessä. Nyt kuitenkin pelkästään listataan loogiset operaattorit. Ne ovat

      Operaattori Merkitys Esimerkki
      ! Ei –operaattori !(a>3)
      && Ja –operaattori (paiva=="Ma" && kk=="Toukokuu")
      || Tai operaattori (paiva=="Ma" || paiva=="To")

Esimerkiksi haluttaessa testata muuttujan i arvoa, onko se lukujen 127 ja 217 välissä, tehtäisiin se seuraavasti

(i>127 && i<217)

Käytettäessä && ja-operaatiota, missä molempien puolien arvot pitää olla tosi, jotta && olisi tosi, on lauseke epätosi, jos vasen puoli on epätosi. Tällöin oikeaa puolta ei ikinä edes yritetä toteuttaa. (ns. oikosulkurakenne). Mikäli halutaan, että && -operaation molemmat puolet käsitellään kaikissa tapauksissa, voidaan && -operaatio korvata & -operaatiolla. Sama koskee || -operaatiota (siis |, jos haluat luopua oikosulkurakenteesta).

On olemassa myös xor -operaattori, jota merkitään ^:llä. xor tarkoittaa, että A^B on epätosi jos A ja B ovat samanarvoisia (siis jos A==B=false tai A==B=true),. Muulloin A^B on tosi.

5.6 Laskujärjestys

Java noudattaa normaaleja matematiikan laskujärjestyksiä eli

– Sulut lasketaan ensin sisäkkäisessä järjestyksessä
– Kerto- ja jakolasku vasemmalta oikealle
– Yhteen- ja vähennyslasku vasemmalta oikealle

Lisäksi metodikutsut selvitetään ennen laskulausekkeen suorittamista.

TARKEMPI suoritusjärjestys löytyy Sunin Java –dokumentaatiosta.

Nyt alammekin olla alkeiden opiskelussa siinä vaiheessa, että voimme siirtyä varsinaiseen ohjelmointiin. Seuraavaksi käsitellään ehtolauseet if sekä if –else ja valintalause switch.

5.7 Tehtäviä.

  1. Tee ohjelma, joka kysyy kuution särmän pituuden ja laskee kuution vaipan pinta-alan ja kuution tilavuuden. (Math.pow(x,3);)
  2. * Toista edellinen tehtävä pallolle. Käytä määritettyä vakio Math.PI. Mieti muuttujien tyyppi tarkkaan.
  3. Tee ohjelma joka laskee lausekkeen P(x)=3x3-5x2+4x-4 arvoja. Saatko lasketuksi jonkin nollakohdan likiarvon?
  4. * Tee uudestaan esimerkkiohjelma, jossa oli koodinpätkä tmp=a; a;=b; b=tmp; . Mitä siinä itse asiassa tapahtui? Piirrä kuva kustakin vaiheesta.
  5. Tee ohjelma, joka kysyy kahta kokonaislukua ja laskee niiden jakojäännöksen ja osamäärän. Mikä on laskujen tuloksen tyyppi?
  6. Tee ohjelma, joka kysyy kartion muotoisen jäätelötuutin korkeuden ja kannen säteen ja sen jälkeen ilmoittaa suurimman tuuttiin sulaneena mahtuvan jäätelöpallon halkaisijan.
  7. Kokeile booleantulostusta. Tee ohjelmaan tulostuslause System.out.println(i<j);, missä i ja j ovat int-tyyppiä ja niille luetaan ensin arvot näppäimistöltä.
  8. * Tee vertailuoperaattorien avulla eri tapauksiin ehto
Päivä on tiistai ja ei ole elokuu
Saipalla on vierasottelu ja vastustaja on pääkaupunkiseudulla mutta se ei ole Jokerit
luku on jaollinen neljällä  mutta ei ole jaollinen 400:lla
x kuuluu reaaliakselin väliin [-2,0] tai [3,100]
Opettajan pitämä tunti on muuta kuin Ranskaa tai sitä ei pidetä Peltolassa
Missi (Mister) on pitkä tai tumma ja ei ole syntynyt tammikuussa

 

Vastaukset

Ilkka Koivistoinen 13.02.2002

Edellinen

Seuraava