Avatar billede tuba Nybegynder
30. september 2002 - 14:49 Der er 8 kommentarer og
1 løsning

heltal og ikke karakter

jeg får læst input fra keyboarded ind således :

strInput = Keyboard.readInt();
   
hvordan kan jeg lave et tjek således at man kun kan indtaste heltal og f.eks, karakterer.
Avatar billede jakoba Nybegynder
30. september 2002 - 14:59 #1
boolean checkOmBarCifre( String str ) {
    for (int i=0; i<str.length(); i++) {
        if ( str.charAt(i)<'0' || str.charAt(i)>'9' ) return false;
    }
    return true;
}

den forudsætter at cifrenen '0' til '9' er placeret kontinuert i alfabetet med '0' forrest og '9' bagest. Jeg kender ikke nogen alfabeter hvor det ikke er tilfældet.

mvh JakobA
Avatar billede carstenknudsen Nybegynder
30. september 2002 - 15:00 #2
Læs en String i stedet og prøv at parse den:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String text = reader.readLine();
try {
int i = Integer.parseInt( text );
// det var et tal
}
catch (NumberFormatException nfe) {
// det var ikke et tal
}
PS hvis Keyboard klassen er noget specifikt i et eller
andet miljø så lad være med at bruge den, din kode bliver
ikke platformsuafhængig.
Avatar billede =maddog= Nybegynder
30. september 2002 - 20:06 #3
Du bruger bogen "JAVA - Software solutions" af Lewis && Loftus i undervisningen. En ganske udemærket bog, men deres Keyboard klasse er BARE ikke den tid værd det har taget dem at bikse den sammen.
Jeg vil kigge lidt på InputStream (System.in) i stedet. Du har netop dit problem fordi du ikke læser byte for byte og derfor ikke kan kontrollere hvilken tast brugeren trykker bytevist.
Avatar billede tuba Nybegynder
30. september 2002 - 20:29 #4
maddog - du har vundet 64.000. Jeg kigger på system.in istedet.
Avatar billede carstenknudsen Nybegynder
01. oktober 2002 - 09:03 #5
System.in er lige præcis hvad der bruges mit svar.
Avatar billede =maddog= Nybegynder
01. oktober 2002 - 10:44 #6
Bingo. Derfor her jeg også kun kommenteret :-)
Det er muligvis bedre at bruge
char read;
read = (char) System.in.read();
og checke byte for byte om det er et tal der proppes ind, så man undgår at skulle kaste en undtagelse.
Men dit svar er 100% korrekt og der er ikke nogen grund til at formudre det yderligere. Det er dog bedst at rubberglove lige får en chance for at kigge InputStream klassen igennem hvis han har brugt L&&L's Keyboard klasse i nogen tid.
Avatar billede carstenknudsen Nybegynder
01. oktober 2002 - 11:16 #7
Jeg er med maddog: ang karakterlæsningen, så kan man
under alle omstændigheder kun få data at læse når
brugeren taster enter, derfor foreslog jeg at man
læser denne linie med et Reader objekt. parseInt
metoder laver så alt arbejdet for en, og man behøver ikke
en løkke til at løbe igennem bytes/characters. Smag
og behag. Du har fuldkommen ret i at man skal have
et godt kendskab til InputStream klassen, og desuden
InputStreamReader for at kunne bruge java.io effektivt.
Avatar billede =maddog= Nybegynder
01. oktober 2002 - 11:31 #8
Det er sikkert også det mest brugervenlige, da et forkastet tastetryk stadig vil blive vist på skærmen.
char read; StringBuffer usrIn = new StringBuffer(40);
while(true) {
read = (char) System.in.read();
if (read>='0'&&read<='9') usrIn.append(read);
}
skulle opfatte 132n423 som 132423 (uden at have testet), men idet 132n423 er det der vises på skærmen vil brugeren sandsyneligvis opfatte det forkert.
Avatar billede tuba Nybegynder
01. oktober 2002 - 11:42 #9
tak for svaret...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester