Jakojäännös tarkoittaa jakolaskussa yli jäävää kokonaislukua. Esimerkiksi jos luku 17 jaetaan luvulla 5, jakojäännös on 2, koska 3 · 5 = 15, mutta 2 jää yli.
Javassa jakojäännös lasketaan %
-merkillä. Esimerkiksi
seuraava ohjelma tulostaa luvun 2:
System.out.println(17 % 5);
Jakojäännöksellä on paljon sovelluksia ohjelmoinnissa. Ensinnäkin jakojäännöksen avulla voi tarkistaa luvun jaollisuuden jollain luvulla. Esimerkiksi jos täytyy selvittää, onko luku parillinen, riittää tarkistaa, onko luvun jakojäännös 2:lla 0:
System.out.print("Anna luku: "); int luku = Integer.parseInt(input.nextLine()); if (luku % 2 == 0) { System.out.println("Luku on parillinen."); } else { System.out.println("Luku on pariton."); }
Myöhemmin kurssilla tulee vastaan muita jakojäännöksen sovelluksia.
Javan osana on kirjasto Math
, jossa on matematiikkaan liittyviä
funktioita. Kirjastoon kuuluvat mm. seuraavat funktiot:
funktio | selitys |
---|---|
Math.abs(x) | itseisarvo |
Math.min(x, y) | pienempi luvuista x ja y |
Math.max(x, y) | suurempi luvuista x ja y |
Math.pow(x, y) | potenssilasku: xy |
Math.sqrt(x) | neliöjuuri |
Seuraava ohjelma laskee luvun neliöjuuren:
System.out.print("Anna luku: "); int luku = Integer.parseInt(input.nextLine()); System.out.println("Neliöjuuri: " + Math.sqrt(luku));
Satunnaislukugeneraattori tuottaa satunnaisia lukuja. Seuraava komento luo satunnaislukugeneraattorin:
Random arpoja = new Random();
Tämän jälkeen generaattorilta voi pyytää satunnaisia kokonaislukuja
komennolla nextInt
. Komennolle annetaan yläraja, ja sen
tuottamat luvut ovat väliltä 0...yläraja-1.
Seuraava ohjelma arpoo satunnaisen luvun väliltä 0–9:
Random arpoja = new Random(); int luku = arpoja.nextInt(10); System.out.println("Satunnainen luku: " + luku);
Ohjelman tulostuksia ovat esimerkiksi seuraavat:
Satunnainen luku: 3
Satunnainen luku: 7
Javan satunnaislukugeneraattorista puuttuu komento, jolla voisi hakea satunnaisen luvun kahden kokonaisluvun väliltä, koska alaraja 0 on kiinteä. Tämä ei ole kuitenkaan suuri ongelma, koska jos haluamme luvun väliltä a...b, voimme myös hakea luvun väliltä 0...(b - a) ja lisätä tulokseen a.
Seuraava esimerkki toteuttaa yllä olevan idean:
System.out.print("Anna alaraja: "); int alaraja = Integer.parseInt(input.nextLine()); System.out.print("Anna yläraja: "); int ylaraja = Integer.parseInt(input.nextLine()); Random arpoja = new Random(); int luku = arpoja.nextInt(ylaraja - alaraja + 1) + alaraja; System.out.println("Satunnainen luku: " + luku);
Ohjelman suoritus voi olla seuraava:
Anna alaraja: 57 Anna yläraja: 65 Satunnainen luku: 63
Javan tyypit int
ja double
tuntuvat päältä päin
melko samanlaisilta, mutta niiden käytössä on silti tärkeitä eroja.
Tyyppi int
tallentaa kokonaisluvun tarkasti, mutta sen lukualue
on melko rajattu: pienin mahdollinen int
-luku on -2147483648 ja
suurin mahdollinen int
-luku on 2147483647.
Seuraavan ohjelman toiminta on yllättävä:
int luku = 2147483647; luku = luku + 1; System.out.println(luku);
Ohjelma tulostaa luvun -2147483648. Tässä int
-muuttujaan
yritettiin laittaa liian suuri luku, jolloin luvun arvo pyörähti ympäri
negatiiviselle puolelle pienimpään mahdolliseen lukuun.
Suurempia kokonaislukuja varten Javassa on tyypit long
ja
BigInteger
, joita ei kuitenkaan käsitellä tällä kurssilla.
Tyyppi double
voi sisältää desimaaliluvun ja sen lukualue on
suuri, mutta tyypin rajoituksena on, että monen luvun arvoa ei voida tallentaa
tarkasti vaan arvo joudutaan pyöristämään. Niinpä double
-tyyppiä
käyttäessä harmina ovat mahdolliset pyöristysvirheet.
Seuraava ohjelma saa aikaan pyöristysvirheen:
double luku = 0.2; luku = luku + 0.1; System.out.println(luku);
Ohjelman tulostus on seuraava:
0.30000000000000004
Pyöristysvirheen vuoksi luku on 0.30000000000000004 eikä 0.3.