Megoldások

14.8.1. Olvassunk be egy számot a billentyűzetről és írjuk ki a négyzetgyökét! A kritikus műveleteket tegyük try - catch blokkokba, és negatív szám bevitele esetén "Negatív számból nem lehet négyzetgyököt vonni!" hibaüzenet jelenjen meg! A helyes eredmény 3 tizedes pontosságú legyen!

 


    Figyeljük meg, hogy az adatbeolvasó nextDouble() metódus is a try blokkon belül van, mivel ez a művelet InputMismatchException kivételt dobhat, ha nem számkaraktert írunk be. Viszont a negatív számból való négyzetgyökvonás a Java rendszerben nem vált ki kivételt, csak az eredménye egy speciális érték (NaN - Not a Number) lesz, amelyet double típusú számon végzett nem definiált művelet eredményez. Ezt viszont lekérdezhetjük, így egy saját kivétel létrehozásával ellenőrzés alatt tartható a gyökvonás művelete. Természetesen az is elég lenne a vizsgálathoz, ha egyszerűen megnézzük a beolvasott adatot, és negatív szám esetén kivételt dobunk.

Nézzük a lehetséges eseteket:


A feladat forráskódja: Gyokvonas.java.

 

14.8.2. Egészítsük ki a 9. fejezet io_token.java programját úgy, hogy hibás inputadatok bevitele esetén is működjön, és csak az egész számokat adja össze! A hibás adatok NumberFormatException kivételt váltanak ki. Elválasztójel a szóköz legyen! Pl. a 23 44,4 12 k 10 bemenő adatokból kiszűrhető egész számok összege 23+12+10=45 jelenjen meg a képernyőn! A végeredmény mellett a hibás adatok is kerüljenek kiírásra!

    Az inputadatokat először stringként olvassuk be, ami nem vált ki kivételt, így lehetőség van arra, hogy ha az adat (token) hibásnak bizonyul, akkor a hibaüzenetben megjeleníthetjük.


Az eredmény:


A feladat forráskódja: io_ell.java.

 

14.8.3. Készítsünk programot, amely a vissza.txt szövegfájlból beolvassa a leghosszabb magyar szót, majd mind előre, mind hátrafelé olvasva kiírja képernyőre! A fájlműveleteket lássuk el megfelelő kivételkezeléssel (FileNotFoundException, IOException)!

    Először olvassuk be a szót a BufferedReader osztály segítségével, majd egy rövid ciklussal állítsuk elő a fordítottját! Figyeljünk a try-catch blokkok megfelelő elhelyezésére!


Az eredmény meggyőző:


A feladat forráskódja: Visszafele.java.

 

14.8.4. Írjunk programot egy 3 db egész szám tárolására szolgáló sor adatszerkezet modellezésére. Típusa "fix kezdetű" legyen, azaz a sor első eleme mindig a sor első tárhelyén  helyezkedjen el! Implementáljuk a sorba való behelyezést és a sorból való kivételt úgy, hogy ezen műveletek hibájának lekezelésére saját kivételosztályt használjunk, és a hiba okát is jelenítsük meg!

    A kivételosztályunk felépítése és a program main metódusa nagyon hasonló a verem implementációjánál alkalmazottakhoz:


    Most is problémát fog okozni a 4. elem behelyezése ill. a megtelt sorból 3-nál több elem kivétele. Itt is alkalmazzuk a vár() metódust a helyes sorrendű megjelenítéshez!


    A sort implementáló osztályban lényeges elem a sor utolsó elemének helyzetét jelző mutató, valamint a két operációs metódus. A betesz() művelet az első "üres" helyre teszi az új elemet, a kivesz() pedig mindig a sor elejéről emeli le azt. Utóbbi művelet megköveteli a sorban megmaradt elemek egy egységgel történő mozgatását a sor eleje felé.


    Az eredményből látható, hogy a 4. elem behelyezése és az üres sorból való kivétel is hibát okozott. Tanulmányozzuk a sor működését is! Az elsőként beletett elem elsőként került ki (FIFO adatszerkezet: First In - First Out, elsőként be - elsőként ki).


A feladat forráskódja: Sor.rar.