/* KokonaislukuTesti.java Esimerkki: luku 3. Tekijä Juha Peltomäki, 11.1999 Aihe: Luokka, jolla käsitellään kokonaislukuja. Luokkaan on toteutettu poikkeuskäsittely. Poikkeusluokka on Rajapoikkeus. Poikkeuksen aiheuttaa luokassa Kokonaisluku tilanne, jossa annettu arvo ei pysy arvolle asetetuissa rajoissa. */ // Exception-luokasta peritty poikkeusluokka class RajaPoikkeus extends Exception { public RajaPoikkeus() { super("virhe! rajat ylitetty"); } public RajaPoikkeus(int ar,int yr) { super("virhe!rajat"+ar+","+yr+"ylitetty"); } } class Kokonaisluku { int luku; int alaraja; int 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(alaraja, ylaraja); } // Metodi voi aiheuttaa poikkeuksen! private void aseta_rajat(int ar, int yr) throws RajaPoikkeus { if (luku < ar || luku > yr) throw new RajaPoikkeus(alaraja, ylaraja); alaraja = ar; ylaraja = yr; } public void nelio() throws RajaPoikkeus { kerro(luku); } public void kuutio() throws RajaPoikkeus { kerro(luku * luku); } // Metodi voi aiheuttaa poikkeuksen! public void kerro(int n) throws RajaPoikkeus { double tulos = luku * n; if (tulos >= alaraja && tulos <= ylaraja) luku = (int)tulos; else throw new RajaPoikkeus(alaraja, ylaraja); } public void tulosta() { System.out.println(this.luku + ", Rajat: [" + this.alaraja + "," + this.ylaraja + "]"); } } // Testiluokka class KokonaislukuTesti { public static void main(String args[]) { try { Kokonaisluku v = new Kokonaisluku(100,0,500); v.tulosta(); v.kerro(4); v.tulosta(); v.nelio(); v.tulosta(); } catch (RajaPoikkeus e) { e.printStackTrace(); } } }