Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 18-06-2007, 17:52
Rob
Avatar van Rob
Rob is offline
Ik heb een text-based application voor mijzelf geschreven om wat dingen te managen en deze accepteert in de menu's cijfers als userinput (bv. Optie 1 = quit, optie 2 = save, etc.).
Dat vragen om een getal gebeurt wel vaker, dus heb ik de volgende methode getInt() geschreven:

PHP-code:
    public static int getInt() {
        try {
            
int option s.nextInt();
            return 
option;
        } catch(
InputMismatchException ime) {
            
System.err.println("Error: " ime);
        }
        return 
0;
    } 
Waarbij s dus de instantie van java.util.Scanner(System.in) is. Door s.nextInt() wacht ie braaf tot ik een getal invul.

Werkt allemaal aardig, totdat je iets anders dan een getal invult.
Als ik dat doe, krijg ik:

Citaat:
Maak keuze: Error: java.util.InputMismatchException
En vanaf dat moment loopt ie oneindig. Iemand enig idee?
__________________
Bad spelling and grammar make me [sic].
Met citaat reageren
Advertentie
Oud 18-06-2007, 19:42
Klaas B.
Klaas B. is offline
Citaat:
Rob schreef op 18-06-2007 @ 18:52 :
Ik heb een text-based application voor mijzelf geschreven om wat dingen te managen en deze accepteert in de menu's cijfers als userinput (bv. Optie 1 = quit, optie 2 = save, etc.).
Dat vragen om een getal gebeurt wel vaker, dus heb ik de volgende methode getInt() geschreven:

PHP-code:
    public static int getInt() {
        try {
            
int option s.nextInt();
            return 
option;
        } catch(
InputMismatchException ime) {
            
System.err.println("Error: " ime);
        }
        return 
0;
    } 
Waarbij s dus de instantie van java.util.Scanner(System.in) is. Door s.nextInt() wacht ie braaf tot ik een getal invul.

Werkt allemaal aardig, totdat je iets anders dan een getal invult.
Als ik dat doe, krijg ik:



En vanaf dat moment loopt ie oneindig. Iemand enig idee?
Ja, je moet niet die exception gebruiken, maar de NumberFormatException.

PHP-code:
try{
        
int option s.nextInt();
        return 
option;
        } catch(
InputMismatchException ime) {
            
System.err.println("Error: " ime);
        } catch(
NumberFormatException nfe) {
                                    
System.err.println("Error: " nfe);
        return 
0;
    } 
Met citaat reageren
Oud 18-06-2007, 19:47
Klaas B.
Klaas B. is offline
Hm, sorry, ik bedenk me net dat dat waarschijnlijk niet werkt.

Je kunt natuurlijk ook voor een heel andere manier kiezen, door in plaats van met try/catch met if/else-statements te werken, zodat je zeker weet wat er gebeurt wanneer A of B gebeurt.
Met citaat reageren
Oud 18-06-2007, 20:06
Verwijderd
Citaat:
When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.
Zie http://java.sun.com/j2se/1.5.0/docs/...l/Scanner.html

Er wordt dan dus geen integer opgehaald, maar de scanner blijft op dezelfde positie van de stream kijken.

Laatst gewijzigd op 18-06-2007 om 20:13.
Met citaat reageren
Oud 18-06-2007, 21:28
Rob
Avatar van Rob
Rob is offline
@Klaas: Er wordt geen NFE gegooid (zie error). Vandaar dat die ook niet echt van toepassing is.

Citaat:
12Trix schreef op 18-06-2007 @ 21:06 :
Zie http://java.sun.com/j2se/1.5.0/docs/...l/Scanner.html

Er wordt dan dus geen integer opgehaald, maar de scanner blijft op dezelfde positie van de stream kijken.
De API had ik er al op nageslagen.
Maar het komt er dus op neer dat de scanner eigenlijk niet geflushed wordt van zijn data en daarom nog steeds die string probeert te matchen met de te verwachten input?
__________________
Bad spelling and grammar make me [sic].
Met citaat reageren
Oud 18-06-2007, 22:50
Verwijderd
Citaat:
Rob schreef op 18-06-2007 @ 22:28 :
@Klaas: Er wordt geen NFE gegooid (zie error). Vandaar dat die ook niet echt van toepassing is.



De API had ik er al op nageslagen.
Maar het komt er dus op neer dat de scanner eigenlijk niet geflushed wordt van zijn data en daarom nog steeds die string probeert te matchen met de te verwachten input?
Ja, dat stond dus ook in de API.

Laatst gewijzigd op 18-06-2007 om 23:10.
Met citaat reageren
Oud 19-06-2007, 07:10
Rob
Avatar van Rob
Rob is offline
Citaat:
12Trix schreef op 18-06-2007 @ 23:50 :
Ja, dat stond dus ook in de API.
Niet goed gekeken.
Met citaat reageren
Oud 19-06-2007, 19:03
Rob
Avatar van Rob
Rob is offline
Er is vast een nettere manier dan s.next() om dit op te lossen, toch? Want nu gebruik ik als het ware next() om het ongeldige token te skippen en dat lijkt mij niet echt de bedoeling van het verhaal. >.>
Met citaat reageren
Oud 19-06-2007, 21:19
Verwijderd
Citaat:
Rob schreef op 19-06-2007 @ 20:03 :
Er is vast een nettere manier dan s.next() om dit op te lossen, toch? Want nu gebruik ik als het ware next() om het ongeldige token te skippen en dat lijkt mij niet echt de bedoeling van het verhaal. >.>
Je kunt ook de read() of readLine() methode van BufferedReader gebruiken.

Laatst gewijzigd op 19-06-2007 om 21:21.
Met citaat reageren
Oud 19-06-2007, 22:29
Rob
Avatar van Rob
Rob is offline
Ja, da's waar. Maar System.in werkt iets prettiger met een commandline programma.

Anyway: soblem prolved. 't Is lelijk, maar er komt later toch een GUI omheen, dus dan boeit 't niet echt. Bedankt voor de hulp.
Met citaat reageren
Oud 20-06-2007, 14:21
Verwijderd
Citaat:
Rob schreef op 19-06-2007 @ 23:29 :
Ja, da's waar. Maar System.in werkt iets prettiger met een commandline programma.

Anyway: soblem prolved. 't Is lelijk, maar er komt later toch een GUI omheen, dus dan boeit 't niet echt. Bedankt voor de hulp.
Je kunt System.in gebruiken met BufferedReader. Zie:
http://pages.cs.wisc.edu/~cs302/io/J...html#consoleIN

Geen dank
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 02:02.