Miten tarkistetaan, jos halutaan, että matka ja aika ovat kokonaislukuja ja annetaan virheilmoitus label1:een, jos eivät ole...miten tuo pitäisi koodata?
String error = "";
int kmMatka = -1;
int aTunti = -1;
try
{
kmMatka= (km);
}
catch (Exception ex)
{
error = "Matkan on oltava kokonaisluku";
}
try
{
aTunti = (a);
}
catch (Exception ex)
{
error = error "Ajan on oltava kokonaisluku";
}
if(error.length()>0) {
label1.setText("Syötä tiedot uudelleen");
String error = "";
int kmMatka = -1;
int aTunti = -1;
try
{
kmMatka= (km);
}
catch (Exception ex)
{
error = "Matkan on oltava kokonaisluku";
}
try
{
aTunti = (a);
}
catch (Exception ex)
{
error = error "Ajan on oltava kokonaisluku";
}
if(error.length()>0) {
label1.setText("Syötä tiedot uudelleen");
Vastaukset 9
Vanhimmat
Luultavasti tuosta aiheutuu NumberFormatException, jos yritetään laittaa vääränlaisia lukuja muuttujaan. Mutta vähän jäi epäselväksi, että minkätyyppisiä muuttujia nuo km ja a ovat=
Siellähän ne muuttujat oli esitelty ennen try-lohkoa...
Ei ollu esitelty a:ta ja km:ää
muttujat ovat int-typpisiä, siksi koska ne pitäisi olla kokonaislukuja vastauksessa.
try{
Ingeger.parseInt(textfield.getText());
}catch (Exception e){label.setText("anna kokonaisluku");}
Juuri näin.
Tässähän siis Integer-luokkametodi.
Vielä varmemmaksi varmuudeksi alkuperiäiseen koodiin:
String error = "";
int kmMatka = -1;
int aTunti = -1;
try
{
kmMatka = Integer.parseInt(km);
}
catch (NumberFormatException ex)
{
error = "Ajan on oltava kokonaisluku";
label1.setText("Syötä tiedot uudelleen");
}
Näin jos nimenomaan haluat napata vain numeroformaatti virheet mutta yleinen Exeption-luokka käy myö mainiosti
> Juuri näin.
> Tässähän siis Integer-luokkametodi.
Aika yleinen tapa, mutta täytyy muistaa, että Javassa on yksi hidas toimenpide: Se on poikkeuksien heitttäminen. Silloin JVM vetää jarrut päälle ja alkaa miettiä, että mitäs polkua tuo säie oikeastaan tuohon virheeseen tulikaan.
Eli kenties parempi tapa olisi käyttää jotain valmiskirjastoa, joka ei heitä poikkeusta, vaan ilmoittaa, että oliko siinä stringissä ylimääräisiä kirjaimia vai ei.
http://www.opensymphony.com/oscore/utility.html#textutils
http://jakarta.apache.org/commons/validator/index.html
> Näin jos nimenomaan haluat napata vain
> numeroformaatti virheet mutta yleinen
> Exeption-luokka käy myö mainiosti
Ei, ei ja ei. "Joku siellä liikkuu; ammu sitä ydinpommilla" ??? Todella huono idea.
Voisihan siinä napata Throwablenkin, mutta kaikkea ei kannata tehdä, mikä jossain sattumalta toimii.
Lisää aiheesta:
http://www.churchillobjects.com/c/11012h.html
Exceptioneita tulee toki välttää.... Sillä niiden käsittely on hidasta (Mutta ei NÄIN hidasta).
Mutta tämä kommentti ei ole enää semanttista kaunopuheisuutta, tahi "hyvän ohjelmointitavan" opettamista. Kommentoijan pointti on oman näsäviisautensa esilletuominen kaikkitietävänä guruna.
Tämäntyyppisessä, yhden arvon lukemisessa erillisen, ei standardin luokkakirjaston käyttäminen on hyttysen ampumista ydinaseella, eikä sillä ole mitään tekoa sen kanssa, mikä on oikein ja mikä väärin.
Eri asia on sitten, jos rakennetaan jotain ydinvoimalan guita (silloin kannattaa java muutenkin unohtaa), yleisin aloittelevan nörttikooderin tekemä virhe on paisuttaa projektiaan turhan pikkumaisilla nokkeluuksilla, ja sijoittaa jokaiseen projektiinsa sata megaa ylimääräisiä kirjastoja.
> Kommentoijan pointti on oman näsäviisautensa
> esilletuominen kaikkitietävänä guruna.
Teknisellä keskustelupalstalla käsittääkseni pyritään pääsemään parhaaseen ratkaisuun jossain tietyssä ongelmassa. Jos joku "ammattilaisena" neuvoo aloittelijoita sutaisemaan takapuoltaan ja nuolemaan (catch Exception), niin mielestäni asiasta kannattaa huomauttaa.
> yleisin aloittelevan nörttikooderin tekemä virhe
> on paisuttaa projektiaan turhan pikkumaisilla
> nokkeluuksilla, ja sijoittaa jokaiseen
> projektiinsa sata megaa ylimääräisiä kirjastoja.
Yleisin vihernokkien tekemä virhe on olla käyttämättä mitään valmiskirjastoja ja koodata sata tuhatta riviä paskaa, ennen kuin huomataan, että "hei, täähän on ihan vituralleen home-made tehty joka paikassa".