Ohjauslauseilla ohjataan ohjelman kulkua. Ohjauslauseilla voidaan toteuttaa vaihtoehtoisia ohjelmalohkoja ja toisaalta toistaa ohjelmasilmukoita. Seuraavassa on käsitelty ehto-, tapaus- ja toistolauseet.
Java ohjelmassa haarautuminen tehdään if - else ehtolauseella.
Syntaksi
if (ehto)
lause1;
else
lause2;
tai
if (ehto)
lause1;
Jos ehto on tosi, suoritetaan lause1 ja jos se ei ole tosi, suoritetaan lause 2. Else –vaihtoehto ei ole pakollinen. Haarautumisrakenteen yhteydessä korostuu koodin luettavuuden merkitys. Käytä aina riittävästi sisennystä oikeassa kohdassa.
Huomaa, että kussakin haarassa toteutetaan vain yksi lause. Se voi olla myös koottu lause {}; joka siis muodostaa yhden loogisen kokonaisuuden.
Koottua lausetta (block) käytettäessä tulee muistaa yksi tärkeä asia. Kootussa lauseessa määritelty muuttuja ei näy kootun lauseen ulkopuolelle ts. muuttujan näkyvyysalue on se koottu lause, jossa muuttuja on määritelty.
int x=10;
{ // koottu lause alkaa
int y=40;
y=y+40;
} // koottu lause loppuu
Muuttujaa x voidaan käyttää normaalisti. Sen sijaan muuttujaa y ei voida käyttää kootun lauseen ulkopuolella, koska sitä ei ole siellä määritelty.
Esimerkki kootusta lauseesta. Mikäli ehto1 on tosi, suoritetaan lauseet lause11, lause12 ja lause13. Muulloin suoritetaan lause2.
if (ehto1)
{
lause11;
lause12;
lause13;
}
else
lause2;
Esimerkkejä. Seuraavassa haarautumiskomentoja ja niihin liittyvien muuttujien määrittelyt
int L;
…
if (L<2) System.out.println("Luku L on pienempi kuin kaksi");
if (L<=2) System.out.println("Luku L on pienempi tai yhtäsuuri kuin kaksi");
if (L>2) System.out.println("Luku L on suurempikuin kaksi");
if (L>=2) System.out.println("Luku L on suurempi tai yhtäsuuri kuin kaksi");
if (L!=2) System.out.println("Luku L on erisuuri kuin kaksi");
char a ; …
if (kirjain=='a') System.out.println("kirjain on a");
else System.out.println("kirjain ei ole a");
String jono1, jono2 …
if (jono1.equals(jono2)) System.out.println("merkkijonot ovat samoja");
else System.out.println("Kyseessä on eri merkkijonot");
//ei käy jono1==jono2. Tämä on yleensä aina epätosiif (jono1.length()==0) System.out.println("merkkijono1 on tyhjä");
if (jono2.length()!=0) System.out.println("merkkijono2 ei ole tyhjä");
Esimerkki: Tee ohjelma, joka laskee tuotteen alennetun hinnan, kun alle 1000 mk:n hintaisen tuotteen alennus on 15% ja muuten 25%.
Esimerkki 13.
import java.io.*;
import Lue;
public class e13 // Alennus -ohjelma
{
public static void main(String args[])
{
double alepros1=0.15; // voisi olla myös double alepros1=0.15, alepros2=0.25,...
double alepros2=0.25;
double rajahinta=1000.0;
double hinta,alepros,alehinta;
System.out.println("anna hinta(mk)");
hinta=lue.dluku();
if (hinta<rajahinta) alepros=alepros1;
else alepros=alepros2;
alehinta=(1.0-alepros)*hinta;
System.out.println("alennettu hinta on "+alehinta+" mk");
}
}
Ohjelmaa on ajettu kahdella eri hinnalla seuraavasti
ajo1: anna hinta(mk)
200
alennettu hinta on 170.0 mkajo2: anna hinta(mk)
1200
alennettu hinta on 900.0 mk
Haarautumiskomennossa esiintyvä ehto voi rakentua useasta eri osasesta. Esimerkiksi edellä olevaan ohjelmaan alennus voitaisiin sisällyttää ehdot: Jos hinta on alle 1000 mk, niin alennus on 15% ja jos hinta on suurempi tai yhtä suuri kuin 1000 mutta pienempi kuin 2000 mk niin alennus on 25%. Muulloin alennus on 30%. Tämä rakenne olisi muotoa
if (hinta<1000) alepros:=0.15;
if (hinta >=1000 && hinta<2000) alepros:=0.25;
if (hinta> 2000) alennus:=0,3;tai
if (hinta<1000) alepros:=0.15;
else
if (hinta >=1000 && hinta<2000) alepros:=0.25;
else
alennus:=0,3;
joka kirjoitetaan yleensä muotoon
if (hinta<1000) alepros:=0.15;
else if (hinta >=1000 && hinta<2000) alepros:=0.25;
else alennus:=0,3;
Esimerkki.
int syntymakuukausi;
…
if (syntymakuukausi ==6 || syntymakuukausi ==7 || syntymakuukausi == 8)
System.out.println("Olet syntynyt kesällä");
else System.out.println("Et ole syntynyt kesällä");
&&, || ja ! operaattoreita voi yhdistellä tarpeen mukaan. Operaattoreiden suoritusjärjestystä ohjataan suluilla. Seuraavassa esimerkissä tutkitaan onko annettu piste kuvaruudulla, kun kuvaruudun vasemman ylänurkan (x,y) koordinaatit ovat (0,0) ja oikean alanurkan (800,600).
Esimerkki 14.
import Lue;
public class
e14
//TestaaOnko800_600Kuvaruudulla;
{
public static void main(String args[])
{
int x,y;
System.out.println("Anna pisteen x ja y koordinaatit");
x=Lue.kluku();
y=Lue.kluku();
if (
(x>=0 && x<=800) && (y>=0 && y<=600 )
)
System.out.println("On
ruudussa");
if (x<0 && (y>=0 && y<=600) ) System.out.println("menee
vasemmalta ohi");
if (x>800 && (y>=0 && y<=600) ) System.out.println("menee
oikealta ohi");
if ( (x>=0 && x<=800) && y<0) System.out.println("menee
ylhäältä ohi");
if ( (x>=0 && x<=800) && y>600) System.out.println("menee
alhaalta ohi");
// Miten testaat kulmasta ohi
menon?
}
}
Vastaukset