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.