Joo eli oon tehnyt lainalaskurin johon tarvitsisin virheentarkistuksia. Ohjelmassa kysytään lainasummaa,korkoprosenttia ja laina-aikaa kokonaisina vuosina. Miten voin tehdä niin, että jokaiseen on pakko syöttää lukuja (jos syöttää kirjaimen niin tulee virheilmoitus eikä saa jättää tyhjäksi)ja vuodet saa olla vain kokonaisina eli jos syöttää desimaalilukuja niin tulee virheilmoitus. Jos virhe sattuu niin ohjelma ei kuitenkaan kaadu vaan se kysyy kysymyksen uudelleen.
Kiitos vastanneille
virheenkäsittely
4
875
Vastaukset 4
- Nero Burner
edit-controllia
- jaded83
Elikkä jos haluat tehdä jotakuinkin hyvin.
KIINTEÄ DOKUMENTTI:
Luo uusi luokka, joka periytyy javax.swing.text.PlainDocument luokasta. Ylikirjoita insertString(int, String, AttributeSet) metodi, jossa tarkistat kuinka monta merkkiä voit hyväksyt.
Nyt sinulla täytyy olla tiedossa maksimi määrä merkkejä, getLength() metodilla saat tietoosi dokumentin pituuden, jos tuodaan enemmäin kuin 1 merkkiä samanaikaisesti on loppupäästä leikattava ylimääräiset pois. Lopuksi aseta tämä dokumentti teksti kentällesi (esim. JTextField).
HYVÄKSYY VAIN NUMEROITA:
Luo uusi luokka, joka periytyy javax.swing.text.DocumentFilter luokasta. Ylikirjoita insertString(DocumentFilter.FilterBypass, int, String, AttributeSet) ja replace(DocumentFilter.FilterBypass, int, int, String, AttributeSet) metodit, joissa formatoit tekstin ensin jollain tietyllä kaavalla esim. java.util.regex.Pattern luokalla Pattern.compile("[^0-9]").
Seuraavaksi suorita String[] merkit = getPattern().split(text) kaikki mitä merkit taulukossa on, niin hyväksytään. Jos haluat käyttää desimaali lukuja niin muuta kaava "[^0-9.]" muotoon ja pisteelle tarkistus, että vain yksi voidaan antaa.
Kun jokin muu kuin numero kirjain syötetään niin kutsut vaikkapa java.awt.Toolkit.getDefaultToolkit().beep(), eli kun formatoidun tekstin pituus on 0 tai != alkuperäinen.
NUMEERINEN TEKSTI KENTTÄ:
Jos haluat vielä jatkaa, niin luo luokka joka perityy JTextField komponentista. Sen kunstruktorin argumenteiksi (int maxLength, Class numberClass) numberClass olisi joko Integer tai Double. Yllä mainittuja luokkia hyväksi käyttäen tämä toimii.
Numeerisen arvon saat seuraavasti (Number)numberClass.getConstructor(new Class[]{java.lang.String.class}).newInstance(text), jos tekstin pituus on 0 niin text muuttuja korvataan "0" arvolla.
Jos haluat vielä jatkaa, niin implementoida AccessibleValue rajapinnan AccessibleJTextField luokkaan (protected JTextField.AccessibleJTextField) ja kutsua accessibleContext.firePropertyChange(AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, null, n) aina kun jokin numero syötettiin teksti kenttään. - if-else
Alla esimerkki jossa syötteen lukuun käytetään scanneria ja muunnoksen Double/Integer luokkan parse -metodia.
--- ALKAA ---
import java.util.Scanner;
public class Esimerkki {
public static double kysyDouble(Scanner lukija, String kysymys) {
while(true)
try {
System.out.print(kysymys);
return Double.parseDouble(lukija.nextLine().trim());
} catch(NumberFormatException e) {
System.out.println("Virheellinen arvo!");
}
}
public static int kysyInt(Scanner lukija, String kysymys) {
while(true)
try {
System.out.print(kysymys);
return Integer.parseInt(lukija.nextLine().trim());
} catch(NumberFormatException e) {
System.out.println("Virheellinen arvo!");
}
}
public static void main(String[] moi) {
Scanner lukija = new Scanner(System.in);
double lainasumma = kysyDouble(lukija, "Lainasumma: ");
double korkoprosentti = kysyDouble(lukija, "Korkoprosentti: ");
int lainaaika = kysyInt(lukija, "Laina-aika: ");
System.out.println(
"Syötit: \n\n"
" Lainasumma: " lainasumma "\n"
" Korkoprosentti: " korkoprosentti "\n"
" Laina-aika: " lainaaika
);
}
}
--- LOPPUU ---- jaded83
No jos käyttäjä tajuaa, että vain numeroita. Pitemmällä tähtäimellä ei hyvä.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Kuhmolainen opettaja tuomittu vainoamisesta
https://yle.fi/a/74-20248184 ”Kuusikymppinen kuhmolaisnainen piinasi naapureitaan lähes kahdeksan vuoden ajan. Nainen271469- 751289
Olet nainen ollut vaikein rasti
Eniten olet tunteitani myllännyt ja niitä kuluttanut, ja tuottanut. 🤔841231Elämäni biisi -paljastus: Tänä lauantaina 26.9. nämä julkkikset istahtavat sinisille sohville!
Katsotko Elämäni biisiä? Elämäni biisi on monen suomalaisen suosikki. Vieraslista lauantaina 26.9. tarjoilee vieraita m101054Anteeksi J-mies
Anteeksi että myötävaikutin siihen että rakastuit minuun, jota et voi koskaan saada. Viimeksi kun näimme ja katselimme t1291035- 72926
Mihin Asiakirjat ovat voineet kunnasta kadota???
LUE kuinka verorahoja haaskattiin Yle: Ähtärin pandalaskelmat salattiin ja hukattiin - Satakunnan Kansa https://share.87881Ähtäri on taas TV: n ja radion ykkösuutinen
Uusi podcast on julkaistu ja on nyt kuunneltavissa. Mot on tehnyt hyvää työtä! Mikko Savola ja kepu ei ota mitään vast52722Mitä muuta on olemassa kuin lisääntyminen
Jos mies ei pääse lisääntymään niin mikä hänen osansa elämässä on? mitä jää jäljelle? Hän on vain muiden palvelija kok136711Siinä kävi mies nyt niin että tämä ämmä muuttaa ulkomaille
Vuonojen maa kutsuu, joten ei hätää. Et kuule minusta enää. 😂 Lycka till! Ämmä riittää.86687- 146604
- 28598
Moottoripyöräonnettomuus
Mopomiitissä tapahtunut onnettomuus ja uutisointi. Ajoradan ylityksen vaarallisuudesta ei mitään uutisointia. Ei myöskää54593- 50589
Suomen 4. seksikkäin mies Miika Nousiaisen tilalle - Pitääkö olla huolissaan palaa tv:seen
Suosittu keskusteluohjelma tekee paluun. Tällä kertaa panelistina ei jatka enää Miika Nousiainen, vaan hänen tilalleen t13579Miten sinä voit?
Kysytkö kukaan sitä sinulta? Olen huomannut, että jos kohtaa empaattisen ihmisen ja hän kysyy noin, saattaa padot murtua91577Uusi ruokapaikka
Tuleeko Haapavedelle uusi lounaspaikka ,haetaan kokkia? Uusi firma kyseessä23561- 37558
Jos oikeasti haluat mies
Tiedät mitä on tehtävä. Luotan, että etenet jos haluat. En voi tehdä enää mitään kun ei ole numeroasi.94556- 46543