/** RajaPoikkeusTesti.java Tekijä: Juha Peltomäki Luokkaan on toteutettu poikkeuskäsittely. Poikkeusluokka (periytyy Exception-luokasta) nimeltään Rajapoikkeus. Poikkeuksen aiheuttaa Kokonaisluku-luokassa tilanne, jossa annettu lukuarvo ei pysy arvolle asetetuissa rajoissa. */ /** RajaPoikkeus on Exception-luokasta peritty poikkeusluokka. */ class RajaPoikkeus extends Exception { public RajaPoikkeus() { super("virhe! rajat ylitetty"); } public RajaPoikkeus(int l, int ar,int yr) { super("virhe!rajat "+ar+"-"+yr+" ylitetty (arvo: " + l + ")"); } } class Kokonaisluku { private int luku; private int alaraja, ylaraja; public Kokonaisluku(int alkuarvo) throws RajaPoikkeus { aseta_rajat(Integer.MIN_VALUE, Integer.MAX_VALUE); alusta(alkuarvo); } public Kokonaisluku(int alkuarvo, int ar, int yr) throws RajaPoikkeus { aseta_rajat(ar, yr); alusta(alkuarvo); } // Metodi voi aiheuttaa poikkeuksen! private void alusta(int alkuarvo) throws RajaPoikkeus { if (alkuarvo>= alaraja && alkuarvo <= ylaraja) luku = alkuarvo; else throw new RajaPoikkeus(alkuarvo, alaraja, ylaraja); } // Metodi voi aiheuttaa poikkeuksen! private void aseta_rajat(int ar, int yr) throws RajaPoikkeus { if (luku < ar || luku > yr) throw new RajaPoikkeus(luku, alaraja, ylaraja); alaraja = ar; ylaraja = yr; } public void nelio() throws RajaPoikkeus { kerro(luku); } public void kuutio() throws RajaPoikkeus { kerro(luku * luku); } public void kerro(int n) throws RajaPoikkeus { double tulos = luku * n; if (tulos >= alaraja && tulos <= ylaraja) luku = (int)tulos; else throw new RajaPoikkeus((int)tulos, alaraja, ylaraja); } public void tulosta() { System.out.println(this.luku + ", Rajat: [" + this.alaraja + "," + this.ylaraja + "]"); } } // Testiluokka public class RajaPoikkeusTesti { public static void main(String args[]) { try { Kokonaisluku v = new Kokonaisluku(100,0,500); v.tulosta(); v.kerro(2); v.tulosta(); v.nelio(); v.tulosta(); } catch (RajaPoikkeus e) { e.printStackTrace(); } } }