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.
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.
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.
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.
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.
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.
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.