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();
}
}