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
864
Vastaukset
- 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
Porvarimediat paniikissa demareiden huiman kannatuksen vuoksi
Piti sitten keksiä "nimettömiin lähteisiin" perustuen taas joku satu. Ovat kyllä noloja, ja unohtivat sen, että vaalit996562KATASTROFI - Tytti Tuppurainen itse yksi pahimmista kiusaajista!!!
STT:n lähteiden mukaan SDP:n eduskuntaryhmän puheenjohtaja Tytti Tuppurainen on käyttäytynyt toistuvasti epäasiallisesti3656133Mikä siinä on ettei persuille leikkaukset käy?
On esitetty leikkauksia mm. haitallisiin maataloustukiin, kuin myös muihin yritystukiin. Säästöjä saataisiin lisäksi lei603023Lääppijä Lindtman jäi kiinni itse teosta
Lindtman kyselemättä ja epäasiallisesti koskettelee viestintäpäällikköä. https://www.is.fi/politiikka/art-20000117808521112484Juuri nyt! Tytti Tuppurainen on käyttäytynyt toistuvasti epäasiallisesti
Ai että mä nautin, Tytti erot vireille! "Käytös on kohdistunut avustajia ja toisia kansanedustajia kohtaan, uutisoi STT1082145- 1251804
Puolen vuoden koeaika
Voisi toimia meillä. Ensin pitäis selvittää "vaatimukset" puolin ja toisin, ennen kuin mitään aloittaa. Ja matalalla pro191663Tytti Tuppurainen nöyryyttää avustajiaan
Tytti Tuppurainen nöyryyttää SDP:n eduskuntaryhmän kokouksissa sekä avustajia että kansanedustajia. Hän nolaa ihmisiä ju1811340Huomaatteko Demari Tytti ei esitä pahoitteluitaan
Samanlainen ilmeisesti kuin Marin eli Uhriutuu no he ovat Demareita ja muiden yläpuolella siis omasta mielestään341285- 731237