4.3 Loogiset operaattorit
Yhteenveto


|
// Ohjelman tehnyt: e-Oppi Oy
// 29.1.2017
void setup () {
size(400,300); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Taustaväri musta
textSize(25); // Tekstin koko 25
}
void draw () {
int luku = 2;
if ((luku >-1) && (luku <= 6)) {
text("Luku "+luku+" on välillä ]-1,6]",10,50);
} else {
text("Luku "+luku+" ei ole välillä ]-1,6]",10,50);
}
if ((luku <=-3) || (luku > 2)) {
text("Luku "+luku+" on välillä ]\u221E,-3] TAI ]2,\u221E[",10,100);
} else {
text("Luku "+luku+" ei ole välillä ]\u221E,-3] TAI ]2,\u221E[",10,100);
}
}
Loogiset operaattorit
MERKITYS | OHJELMOINTI | MATEMATIIKKA |
---|---|---|
JA | && | ![]() |
TAI | || | ![]() |
EI | ! | ![]() |
Usein tulee vastaan tilanteita, että pitäisi toteutua kaksi tai useampi ehto yhtä aikaa. Tällöin tarvitsemme loogisia operaattoreita: JA, TAI, EI.
JA-ehto tarkoittaa sitä, että molemmat ehdot täyttyvät. TAI tarkoittaa sitä, että jompikumpi ehdoista täyttyy. EI tarkoittaa aina vastakkaista ehtoa. Tutkitaan ehtojen käyttämistä esimerkkien avulla.
Kun yhdistellään eri ehtoja, niin ehdot yhdessä toimivat seuraavasti.
EHTO 1 | EHTO 2 | EHTO1 JA EHTO2 | EHTO1 TAI EHTO2 |
---|---|---|---|
tosi | tosi | tosi | tosi |
tosi | epätosi | epätosi | tosi |
epätosi | tosi | epätosi | tosi |
epätosi | epätosi | epätosi | epätosi |
Taulukosta nähdään se, että kun käytetään JA-operaattoria, niin molempien ehtojen pitää toteutua. TAI-operaattorilla riittää, kun vain toinen ehdoista täyttyy.
Ei-ehto muuttaa ehdon aina vastakkaiseksi.
EHTO | EI EHTO |
---|---|
tosi | epätosi |
epätosi | tosi |
Esimerkki: Pääkaupunki
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(600,200); // Ikkunan koko
background(255); // Valkea taustaväri
fill(0); // Musta tekstin väri
textSize(32); // Tekstin koko 32
}
void draw() {
String kaupunki = "Helsinki"; // Muuta tähän kaupungin nimi
if ((kaupunki == "helsinki") || (kaupunki=="Helsinki")) {
text("Tämä on Suomen pääkaupunki",10,100);
} else {
text("Tämä ei ole Suomen pääkaupunki",10,100);
}
}
Ohjelmoinnissa TAI-sana korvataan kahdella pystyviivalla: ||. Kun kirjoitat ehtoja, niin rilliset ehdot pitää laittaa sulkeisiin. Tämä selkeyttää koodia ja on vaatimus ehtojen toimimiselle.
Mitä jos tähän ehtoon laittaisi JA-vertailuoperaattorin? Se ei olisi järkevää, koska muuttuja ei voi saada yhtä aikaa kahta eri arvoa. Vaikka muuttujalla olisi oikea arvo, niin if-lauseen ehto ei koskaan täyttyisi.
Alla on ohjelman esimerkkiajo kahdella eri muuttujan arvolla.

Jos haluat tehdä ohjelman, joka kysyy pääkaupungin-nimeä Javan syöttökentän avulla, niin ehtolauseessa on käytettävä ehtoa, joka on muotoa: muuttuja.equals("Tekstiä"). Syy tähän on se, että Javan syöttökenttä palauttaa muuttujan arvoksi String objektin, ei String tietotyypin. Tehdään tästä kokonainen ohjelma.
// Ohjelman tehnyt: e-Oppi Oy
// 2.1.2018
import static javax.swing.JOptionPane.*;
void setup () {
size(600,200); // ikkunan koko
fill(0); // Tekstinväri musta
background(255); // Taustaväri valkoinen
textSize(32); // Tekstin koko 20
noLoop(); // void draw ()-lohko suoritetaan vain kerran
}
void draw () {
String vastaus = showInputDialog("Mikä on Suomen pääkaupunki?");
if ((vastaus.equals("Helsinki")) || (vastaus.equals("helsinki"))) {
text("Tämä on suomen pääkaupunki",10,100);
} else {
text("Tämä ei ole suomen pääkaupunki",10,100);
}
}
Huomaa, että yllä oleva esimerkki toimii vain PC-koneilla. Javan kirjastoja ei ole käytössä esimerkiksi iPad-tabletin Processing-sovelluksella.
Esimerkki: Suurempi ja pienempi kuin
Tehdään ohjelma, joka tutkii, onko annettu luku välillä 2 ≤ x ≤ 6.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(400,200); // Ikkunan koko
background(255); // Valkoinen taustaväri
fill(0); // Musta tekstin väri
textSize(32); // Tekstin koko 32
}
void draw() {
int luku = 5; // Muuta luku-muuttujan arvoa tässä
if ((luku >= 2) && (luku <= 6)) {
text("Luku "+luku+ " on välillä 2...6",10,100);
} else {
text("Luku "+luku+ " ei ole välillä 2...6",10,100);
}
}
Voimme kirjoittaa ehdon: luku on suurempi tai yhtä suuri kuin 2 eli x ≥ 2. Tämä käsittää luvun kaksi ja sitä suuremmat kokonaisluvut eli A = {2,3,4,5,6,7,8,9,…}
Vastaavasti voimme kirjoittaa ehdon: luku on pienempi tai yhtä suuri kuin 6 eli x ≤ 6. Tämä käsittää luvun kuusi ja kaikki sitä pienemmät kokonaisluvut eli B = {…,-1,0,1,2,3,4,5,6}
Nyt kun yhdistämme JA-vertailuoperaattorilla nämä kaksi ehtoa, niin saamme ehdon, joka käsittää vain näiden kahden lukujoukon yhteiset luvut eli A JA B = {2,3,4,5,6}.
Ehto voitaisiin kirjoittaa muodossa
JOS ((luku on suurempi tai yhtä suuri kuin 2) JA (luku on pienempi tai yhtä suuri kuin 6)) |
Eli sama ohjelmointikielessä näyttää tältä.
if ((luku >=2) && (luku <= 6)) |
Alla on kuvattu kaksi esimerkkiajoa kahdella eri muuttujan arvolla.
Esimerkki: suurempi tai pienempi kuin
Tehdään ohjelma, joka tutkii, onko annettu luku pienempi kuin 2 tai suurempi kuin 6.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(400,200); // Ikkunan koko
background(255); // Valkea taustaväri
fill(0); // Musta tekstin väri
textSize(32); // Fonttikoko 32
}
void draw() {
int luku = 1; // Muuta tähän luku-muuttujan arvo
if ((luku < 2) || (luku > 6)) {
text("Luku "+luku+ " ei ole välillä 2...6",10,100);
} else {
text("Luku "+luku+ " on välillä 2...6",10,100);
}
}
Voimme kirjoittaa ehdon: luku on pienempi kuin 2 eli x < 2. Tämä käsittää lukua kaksi pienemmät kokonaisluvut eli A = {…,-2,-1,0,1}.
Vastaavasti voimme kirjoittaa ehdon: luku on suurempi kuin 6 eli x > 6. Tämä käsittää lukua kuusi suuremmat kokonaisluvut eli B = {7,8,9,10,…}.
Kun nyt yhdistämme nämä kaksi ehtoa, niin emme voi käyttää JA-vertailuoperaattoria, koska luku ei voi olla yhtä aikaa sekä suurempi kuin kuusi ja pienempi kuin kaksi. Meidän on käytettävä TAI-vertailuoperaattoria. Jolloin A tai B ={…,-2,-1,0,1,7,8,9,10,…}
Ehto voitaisiin kirjoittaa muodossa:
JOS ((luku on pienempi kuin 2) TAI (luku on suurepi kuin 6)) |
Joka näyttää ohjelmointikielessä tältä.
if ((luku < 2) || (luku > 6)) |
Esimerkki: TAI-operaattorin käyttö
- Jos numero saa arvon 4, niin tulostetaan kommentti: "Hylätty".
- Jos numero saa arvon 5 TAI numero saa arvon 6, niin tulostetaan kommentti: "Välttävä".
- Jos numero saa arvon 7 TAI numero saa arvon 8, niin tulostetaan kommentti: "Hyvä".
- Jos numero saa arvon 9 TAI numero saa arvon 10, niin tulostetaan kommentti: "Kiitettävä".
- Kaikilla muilla numeroilla tulostetaan kommentti: "Tämä ei ole koenumero".
Kaikkein järkevintä on ketjuttaa if-lauseet else-if -rakenteella, niin viimeinen else-vaihtoehto hoitaa kaikki muut numerot kuin numerot 4, 5, 6, 7, 8, 9 ja 10. Kun käytämme TAI-operaattoria, niin tällöin voimme yhdistää eri ehtoja. Koska numero-muuttuja voi vain saada kokonaislukuarvoja, niin TAI-operaattori on kätevä eri ehtojen yhdistelyyn. Tulkinnan varaa ei ole. Kokonainen ohjelma näyttää tältä.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(350,150); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Tekstin väri musta
textSize(20); // Tekstin koko 20
}
void draw() {
int numero = 8; // Muuta tähän koenumero
text("Koenumerosi on: "+numero,10,50); // Ilmoita koenumero
if (numero == 4) { // Jos numero on 4, niin
text("Se on hylätty",10,100); // silloin tulosta hylätty
} else if ((numero == 5) || (numero == 6)) {
// Tai jos numero on 5 TAI numero on 6, niin
text("Se on välttävä",10,100); // silloin tulosta välttävä
} else if ((numero == 7) || (numero == 8)) {
// Tai jos numero on 7 TAI numero on 8, niin
text("Se on hyvä",10,100); // silloin tulosta hyvä
} else if ((numero == 9) || (numero == 10)) {
// Tai jos numero on 9 TAI numero on 10, niin
text("Se on kiitettävä",10,100); // silloin tulosta kiitettävä
} else { // Tai kaikissa muissa tapauksissa
text("Tämä ole koenumero",10,100); // tulosta ei ole koenumero
}
}
Ohjelma tulostaa esimerkiksi seuraavaa:

Esimerkki: JA-operaattorin käyttö
- Jos numero on suurempi tai yhtä suuri kuin 4 JA numero on pienempi kuin 4½, silloin tulostetaan: "Hylätty".
- Jos numero on suurempi tai yhtä suuri kuin 4½ JA numero on pienempi kuin 6½, silloin tulostetaan: "Välttävä".
- Jos numero on suurempi tai yhtä suuri kuin 6½ JA numero on pienempi kuin 8½, silloin tulostetaan: "Hyvä".
- Jos numero on suurempi tai yhtä suuri kuin 8½ JA numero on pienempi tai yhtä suuri kuin 10, silloin tulostetaan: "Kiitettävä".
- Jos numero on suurempi kuin 10 TAI pienempi kuin 4, silloin tulostetaan: "Tämä ei ole koenumero".
Lukuväli | Tulostus |
---|---|
numero < 4 | Ei ole koenumero |
4 ≤ numero < 4½ | Hylätty |
4½ ≤ numero < 6½ | Välttävä |
6½ ≤ numero < 8½ | Hyvä |
8½ ≤ numero ≤ 10 | Kiitettävä |
numero > 10 | Ei ole koenumero |
Kun kyseessä on lukuväli, niin tällöin on ehdottomasti käytettävä JA-operaattoria. Paitsi viimeisessä ehdossa on pakko käyttää TAI-operaattoria, koska luku ei voi yhtä aikaa olla sekä suurempi kuin 10 ja pienempi kuin 4. Myöskään ehtojen ketjuttaminen ei ole tässä välttämätöntä. Ketjuttamisella ohjelma toisin saataisiin tehokkaammaksi. Kokonainen ohjelma on seuraavanlainen.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(350,150); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Tekstinväri musta
textSize(20); // Tekstin koko
}
void draw() {
float numero = 6.5; // Vaihda tähän koenumero. Numero on nyt desimaaliluku.
text("Koenumerosi on: "+numero,10,50); // Tulosta koenumerosi
if ((numero >= 4) && (numero < 4.5)) {
// Jos numero on välillä 4 ≤ numero < 4,5
text("Se on hylätty",10,100); // niin tulosta hylätty
}
if ((numero >= 4.5) && (numero < 6.5)) {
// Jos numero on välillä 4,5 ≤ numero < 6,5
text("Se on välttävä",10,100); // niin tulosta välttävä
}
if ((numero >= 6.5) && (numero < 8.5)) {
// Jos numero on välillä 6,5 ≤ numero < 8,5
text("Se on hyvä",10,100); // niin tulosta hyvä
}
if ((numero >= 8.5) && (numero <= 10)) {
// Jos numero on välillä 8,5 ≤ numero ≤ 10
text("Se on kiitettävä",10,100); // niin tulosta kiitettävä
}
if ((numero > 10) || (numero < 4)) {
// Jos numero on suurempi kuin 10 TAI numero on pienempi kuin 4
text("Tämä ole koenumero",10,100); // niin tulosta ei ole koenumero
}
}
Tässä kaksi ohjelman ajoa eri numeron arvoilla. Puolikkaat nostetaan aina ylöspäin.

Esimerkki: Ei-operaattori
muuttuja | Muuttujan arvo on tosi. |
!muuttuja | Muuttujan arvo ei ole tosi (= epätosi). |
Tehdään ohjelma, jossa ikkunan taustaväri muuttuu sen mukaan, missä hiiren osoitin on. Jos hiiren osoitin on keskilinjan vasemmalla puolen, niin ikkunan taustaväri on punainen. Jos hiiren osoitin on keskilinjan oikealla puolen, niin ikkunan taustaväri on vihreä. Hiiren vaakasuuntainen paikka saadaan komennolla: mouseX;. Voit lukea lisätiedoista lisää hiiri-komennoista. Kokonainen ohjelma on seuraava.
|
// Ohjelman tehnyt e-Oppi Oy
// 19.3.2017
boolean vari = true; // Määritellään totuusarvo-muuttuja
void setup() {
size(600,600); // Ikkunan koko
}
void draw() {
if (mouseX > 300) { // Jos hiiri on pystyviivan oikealla puolen
vari = false; // niin aseta arvo false (= epätosi)
} else { // muutoin
vari = true; // aseta arvo true (= tosi)
}
if (vari) { // Jos vari on true (= tosi), niin
background(255,0,0); // aseta taustaväri punaiseksi
}
if (!vari) { // Jos vari ei ole true eli on false (=epätosi)
background(0,255,0); // aseta taustaväri vihreäksi.
}
line(300,0,300,600); // Piirrä keskelle ikkunaa pystyviiva
}
Aja ohjelma ja liikuta hiirtä oikealle ja vasemmalle. Mitä havaitset? Jos ottaisit mukaan hiiren pystykoordinaatin lukevan komennon: mouseY; niin kuinka saisit ikkunan jaettua neljään osaan, niin että väri muuttuisi, jokaisessa osassa hiiren liikkeiden mukaan? Tällöin tarvitset kaksi totuusarvo muuttujaa ja JA-operaattoria. Ohjelman koodi olisi seuraavanlainen.
// Ohjelman tehnyt e-Oppi Oy
// 19.3.2017
boolean vari1 = true; // Määritellään totuusarvo-muuttuja vari1
boolean vari2 = true; // Määritellään totuusarvo-muuttuja vari2
void setup() {
size(600,600); // Ikkunan koko
}
void draw() {
if (mouseX > 300) { // Jos hiiri on pystyviivan oikealla puolen, niin
vari1 = false; // aseta arvo false (= epätosi)
} else { // muutoin
vari1 = true; // aseta arvo true (= tosi)
}
if (mouseY > 300) { // Jos hiiri on vaakaviivan alemmalla puolen, niin
vari2 = false; // aseta arvo false (= epätosi)
} else { // muutoin
vari2 = true; // aseta arvo true (= tosi)
}
if ((vari1) && (vari2)) { // Jos vari1 on true JA vari2 on true, niin
background(255,0,0); // aseta taustaväri punaiseksi
}
if ((vari1) && (!vari2)) { // Jos vari1 on true JA vari2 on false, niin
background(0,0,255); // aseta taustaväri siniseksi
}
if ((!vari1) && (vari2)) { // Jos vari1 on false ja vari2 on true, niin
background(0,255,0); // aseta taustaväri vihreäksi.
}
if ((!vari1) && (!vari2)) { // Jos vari1 on false ha vari2 on false, niin
background(255,255,0); // aseta taustaväri keltaiseksi.
}
line(300,0,300,600); // Piirrä keskelle ikkunaa pystyviiva
line(0,300,600,300); // Piirrä keskelle ikkunaa vaakaviiva
}
Kun ikkunan jaetaan neljään osaan, niin ehdot toimivat seuraavasti.
Jos (vari1 = tosi) JA (vari2 = tosi), niin punainen |
Jos (vari1 = epätosi) JA (vari2 = tosi), niin vihreä |
Jos (vari1 = tosi) JA (vari2 = epätosi), niin sininen |
Jos (vari1 = epätosi) JA (vari2 = epätosi), niin keltainen |