Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: InputMismatchException ei toimi! [JAVA]

Sivun loppuun

Tommittaja [28.11.2009 23:11:58]

#

nyt pukkaa outoa virhettä kun teen sitä Quest of ASCII:ta: nyt hommaan noita kaatumisia pois, joten try/catch-lauseita tulee paljon. tuli juuri sellainen outo tilanne, että kun yritin Napata Scanner luokan InputMismatchExceptionia, niin kääntäjä valittaa ettei löydä "symbolia"... elikkä

try {
    int muuttuja = Lue.nextInt();
} catch (InputMismatchException e) {}

hmm... sitten vielä yksi juttu: miten voin siepata monta virhettä samalla catch-lauseella?

hk [28.11.2009 23:35:11]

#

Helpompaa on siepata monta kuin yksi virhe. Laita catch (Exception e), niin saat kaikki Exception-luokan virheet, mutta useinkin sinun on syytä erotella, mitä siepataan. Muun muassa siksi, että jos nappaa mitä vaan, niin sieltä voikin tulla ihan eri virheitä kuin osaat odottaa. Tämä paljastuu, kun täsmennät minkä virheen missäkin kohdassa nappaat.

Tommittaja [28.11.2009 23:39:05]

#

siksi juuri sieppaankin juuri tuon InputMismatchin ja ArrayOutOfBoundsExceptionin, ettei ohjelma kaadu, sillä se ei näyttänyt pysyvän käynnissä ainoastaan Exceptionin sieppaamisella... mutta onko kellään tietoa, mistä tuo virhe voi johtua. ja myöskin haluaisin sen monen virheen nappaamisen kerralla.

Edit: oli muuten aika erikoista kun ohjelman kaatuessa komentorivi sanoi että virhe sijaitsee Scanner luokan rivillä 28xx ja muita yli 2000 xD ei kai siellä mitään...

Blaze [29.11.2009 00:41:36]

#

Tommittaja kirjoitti:

kääntäjä valittaa ettei löydä "symbolia"...

import java.util.InputMismatchException;

Tommittaja kirjoitti:

mutta onko kellään tietoa, mistä tuo virhe voi johtua

Scanner sai vastaan sellasta dataa, mitä ei odotettu

Tommittaja [29.11.2009 00:59:41]

#

aa, no taidan sitten importata koko util luokan kerralla. eli import java.util.*;

hk [29.11.2009 11:29:22]

#

Tommittaja kirjoitti:

siksi juuri sieppaankin juuri tuon InputMismatchin ja ArrayOutOfBoundsExceptionin, ettei ohjelma kaadu, sillä se ei näyttänyt pysyvän käynnissä ainoastaan Exceptionin sieppaamisella...

Juuri päinvastoin, Exception on noiden yliluokka eli ne ovat kumpikin Exceptioneja. Exception ei siis ole "ainoastaan" jotain, vaan sisältää nuo molemmat ja paljon muuta.

Monta virhettä napataan kerralla sieppaamalla joku niiden yliluokka, äärimmillään Throwable, joka kattaa kaikki Exceptionit ja myös Errorit. Pelkästään kaksi tiettyä virhettä voisi pyydystää vain, jos jollain luokalla olisi aliluokkana ne eikä mitään muuta. Muuten pitää käyttää kahta catch-lohkoa, mutta eihän niiden koodia tarvitse tuplana kirjoittaa, jos se on sama tai lähes sama, vaan teet siitä erillisen metodin.

Luokkien perimishierarkia selviää Javan API-kuvauksesta, sieltä voi katsoa vaikka mikä on lähin yhteinen yliluokka kahdelle luokalle. Kannattaa lukea joku Java-opas, jossa selitetään periytymiset ym. koska Javassa ei pärjää kovin pitkään ymmärtämättä niitä.

Tommittaja [29.11.2009 13:51:37]

#

Muttakun siinä on vaan tämä ongelma: laitan catch (Exception e) niin se sanoo, että ohjelma kaatuu ArrayIndexOutOfBoundsiin. Taas kun laitan catch (ArrayIndexOutOfBoundsException e) se sanoo että InputMismatchException... ilkeätä..

PS: tajusin kyllä pointtisi, mutta tuo exception ei oikein nyt toimi oikein :D

Sami [29.11.2009 14:13:50]

#

try {
  // ...
} catch (InputMismatchException e) {
  // Tuli InputMismatchException
} catch (ArrayIndexOutOfBoundsException e) {
  // Tuli ArrayIndexOutOfBoundsException
} catch (IOException e) {
  // Tuli IOException
} catch (Exception e) {
  // Tuli joku muu poikkeus kuin jokin noista kolmesta ylemmästä
}

Tommittaja [29.11.2009 14:19:10]

#

mutta tuon Exceptioninhan pitäisi siepata kaikki Exception luokan virheet mutta se kaatuu silti ArrayIndexiin... ? omistuista. pitäiskö sitten laittaa joku Throws Exception ;D

Edit: mutta kiitos tuosta tekniikasta. kokeilen.

Macro [29.11.2009 14:22:32]

#

Tuossa kokeillaan tehdä try-lohkossa jotain, mutta jos se virhe on jossain noista kolmesta, niin jäädään siihen lohkoon. Jollei se ole niissä missään, mutta tulee virhe niin mennään Exception e-kohtaan. Ja jollei virheitä ole, niin normaalisti suoritusta jatketaan noidenkin ohi.

Tommittaja [29.11.2009 14:34:56]

#

laitoin tossa just tällasen koodin:

int ukkovalinta = 0;
try {
	ukkovalinta = Lue.nextInt();
} catch (ArrayIndexOutOfBoundsException e) {
} catch (InputMismatchException e) {
} catch (Exception e) {}

ja se kaatui... ArrayIndexOutOfBoundsiin!?? mitä ihmettä

Sami [29.11.2009 14:59:55]

#

Katsohan vielä millä rivillä se poikkeus tulee... Scanner.nextInt() ei koskaan heitä ArrayIndexOutOfBoundsExceptionia ja muutenkin tuo catch-lohko pitäisi huolen siitä, että käsittelet sen virheen jos sellainen ilmenee (tässä tapauksessa käsittely tosin on että et tee mitään).

Tommittaja [29.11.2009 15:02:02]

#

ai KIITOS! sehän on ihan selvä trycatchin väärä paikka kun tuo char tauluhan sen virheen heittää... :D kiitos!

Edit: nyt tuli toisenlainen ongelma: kun se nappaa sen virheen, se on whilen sisällä niin se menee ikuiseen silmukkaan... :(


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta