15. Keskiarvojen laskentaa
import java.util.Scanner; public class Teht15 { private static Scanner lukija = new Scanner(System.in); public static void main (String [] args) { System.out.println("Keskiarvojen laskenta."); int lkm = 0; do { System.out.print("Anna lukujen määrä (tai 0, jolloin lopetetaan) :"); lkm = lukija.nextInt(); if (lkm > 0) laskeSyottoKarvo (lkm); }while (lkm > 0); } public static void laskeSyottoKarvo (int lkm) { double summa = 0; for (int i=1; i<=lkm; i++) { System.out.print("Anna " + i + ". luku: "); summa += lukija.nextDouble(); } System.out.println("Keskiarvo on: "+summa/lkm); } }
16. Potenssien laskentaa
import java.util.Scanner; public class Teht16 { private static Scanner lukija = new Scanner(System.in); /* pääohjelma, joka tarjoaa potenssin laskentapalvelun */ public static void main (String [] args) { System.out.println("Potenssien laskentaa!"); int kanta = pyydaKokLuku("Anna kanta:"); int eksponentti = pyydaKokLuku("Anna eksponentti:"); System.out.println("Vastaus:" + potenssiin(kanta,eksponentti)); } /* metodi potenssin laskemiseen */ public static double potenssiin (double kanta, int eksponentti) { double tulos = 1.0; for (int i=0; i < itseisarvo(eksponentti); i++) tulos *= kanta; if (eksponentti < 0) tulos = 1/tulos; return tulos; } /* tässä metodi kokonaisluvun lukemiseen tarkastuksen kera */ private static int pyydaKokLuku( String teksti ) { while (true) { System.out.print(teksti); if (lukija.hasNextInt()) return lukija.nextInt(); lukija.nextLine(); } } /* metodi, joka palauttaa luvun itseisarvon */ private static int itseisarvo (int luku) { if (luku < 0) luku *= -1; return luku; } }
17. Radio
public class Radio { private boolean paalla; private int volume; private double kanava; public Radio() { this.paalla = true; this.volume = 5; this.kanava = 2300.0; } public boolean onkoPaalla() { return this.paalla; } public int mikaVolume() { return this.volume; } public double mikaKanava() { return this.kanava; } public void kytkeRadio ( boolean paalla ) { this.paalla = paalla; } public boolean vaihdaKanava ( double kanava ) { if (kanava < 2300.0 || kanava > 26100.0) return false; this.kanava = kanava; return true; } public boolean saadaVolume ( int volume ) { if (volume < 0 || volume > 9) return false; this.volume = volume; return true; } /* pääohjelma radion testausta varten */ public static void main (String [] args) { Radio r = new Radio(); System.out.println("Päällä:" + r.onkoPaalla()); System.out.println("Volume:" + r.mikaVolume()); System.out.println("Kanava:" + r.mikaKanava()); r.kytkeRadio ( false ); // pois päältä System.out.println("\nPäällä:" + r.onkoPaalla()); System.out.println("Volume:" + r.mikaVolume()); System.out.println("Kanava:" + r.mikaKanava()); r.kytkeRadio ( true ); // päälle taas boolean b = r.vaihdaKanava ( 1000 ); boolean b2= r.saadaVolume ( 100 ); System.out.println("\nb:" + b); // onnistuiko vaihto? System.out.println("b2:" + b2); // onnistuiko vaihto? System.out.println("Volume:" + r.mikaVolume()); System.out.println("Kanava:" + r.mikaKanava()); System.out.println("Päällä:" + r.onkoPaalla()); boolean b3 = r.vaihdaKanava ( 24000 ); boolean b4= r.saadaVolume ( 3 ); System.out.println("\nb:" + b3); // onnistuiko vaihto? System.out.println("b2:" + b4); // onnistuiko vaihto? System.out.println("Volume:" + r.mikaVolume()); System.out.println("Kanava:" + r.mikaKanava()); System.out.println("Päällä:" + r.onkoPaalla()); r.kytkeRadio ( false ); // lopuksi radio suljetaan } }
18. Sekuntilaskuri
/* Tässä sekuntilaskuri-ratkaisussa pidetään luokan Sekuntilaskuri sisällä ainoastaan kirjaa kokonaissekuntimäärästä. Aksessorit laskevat aina tarpeen mukaan sekuntien kokonaismäärästä joko tunnit, minuutit tai sekunnit. 24 tuntia = 24*60*60 = 86400 sekuntia 1 tunti = 3600 sekuntia 1 minuutti = 60 sekuntia */ public class Sekuntilaskuri { private int sekunnit; public Sekuntilaskuri() { this.sekunnit = 0; } public void lisaaSekunti() { if (this.sekunnit == 86399) this.sekunnit = 0; else this.sekunnit++; } public int annaTunnit() { return (this.sekunnit / 3600); } public int annaMinuutit() { return (this.sekunnit - this.annaTunnit() * 3600) / 60; } public int annaSekunnit() { int temp = (this.sekunnit - this.annaTunnit() * 3600); return temp - ((temp/60)*60); } public String toString() { return this.annaTunnit() + ":" + this.annaMinuutit() + ":" + this.annaSekunnit(); } public static void main (String [] args) /* testipääohjelma */ { Sekuntilaskuri s = new Sekuntilaskuri(); for (int i = 0; i <= 24*60*60+500; i++) { System.out.println(s); s.lisaaSekunti(); } } }
Tässä toinen sekuntilaskuri-ratkaisu.
/* Alla toinen sekuntilaskuri-ratkaisu, jossa pidetään luokan sisäisessä toteutuksessa kirjaa tunneista, minuuteista ja sekunneista. Sekuntilaskurin ja Sekuntilaskuri2:n toiminta on olion käyttäjän kannalta identtistä. */ public class Sekuntilaskuri2 { private int tunnit; private int minuutit; private int sekunnit; public Sekuntilaskuri2() { this.tunnit = this.minuutit = this.sekunnit = 0; } public void lisaaSekunti() { if (this.sekunnit < 59) this.sekunnit++; else { this.sekunnit = 0; if (this.minuutit < 59) this.minuutit++; else { this.minuutit = 0; if (this.tunnit < 23) this.tunnit++; else this.tunnit = 0; } } } public int annaTunnit() { return this.tunnit; } public int annaMinuutit() { return this.minuutit; } public int annaSekunnit() { return this.sekunnit; } public String toString() { return this.annaTunnit() + ":" + this.annaMinuutit() + ":" + this.annaSekunnit(); } public static void main (String [] args) /* testipääohjelma */ { Sekuntilaskuri2 s = new Sekuntilaskuri2(); for (int i = 0; i <= 24*60*60+500; i++) { System.out.println(s); s.lisaaSekunti(); } } }
18. MinMax lämpomittari
public class MinMax { private double minimi; private double maksimi; private boolean alkutila; public MinMax() { this.asetaAlkutilaan(); } public double mikaOnMinimi() { return minimi; } public double mikaOnMaksimi() { return maksimi; } public boolean onAlkutilassa() { return alkutila; } public void asetaAlkutilaan() { minimi = maksimi = 0; alkutila = true; } public void kirjaaLampotila(double lampo) { if (alkutila) { alkutila=false; minimi = maksimi = lampo; } else { if (lampo < minimi) minimi = lampo; else if (lampo > maksimi) maksimi = lampo; } } /* pääohjelma */ public static void main (String [] args) { System.out.println("MinMax lämpötilamittari"); MinMax mx = new MinMax(); System.out.println("Alkutila:" + mx.onAlkutilassa()); System.out.println("Minimi:"+ mx.mikaOnMinimi()); System.out.println("Maksimi:"+ mx.mikaOnMaksimi()); System.out.println(); mx.kirjaaLampotila(-123.4); System.out.println("Alkutila:" + mx.onAlkutilassa()); System.out.println("Minimi:"+ mx.mikaOnMinimi()); System.out.println("Maksimi:"+ mx.mikaOnMaksimi()); System.out.println(); mx.kirjaaLampotila(232); mx.kirjaaLampotila(234.23); mx.kirjaaLampotila(-12.5); System.out.println("Alkutila:" + mx.onAlkutilassa()); System.out.println("Minimi:"+ mx.mikaOnMinimi()); System.out.println("Maksimi:"+ mx.mikaOnMaksimi()); System.out.println(); mx.asetaAlkutilaan(); System.out.println("Alkutila:" + mx.onAlkutilassa()); System.out.println("Minimi:"+ mx.mikaOnMinimi()); System.out.println("Maksimi:"+ mx.mikaOnMaksimi()); System.out.println(); } }