Avatar billede hsp5 Nybegynder
06. december 1999 - 11:40 Der er 4 kommentarer og
1 løsning

System.in.read()

Hej, er der nogen der ved hvorfor jeg får nogle underlige resultater ved at bruge metoden System.in.read().

Jeg laver et simpelt UI i en kommandoprompt af testårsager, da jeg ikke gider designe skærmbilleder endnu.

Jeg bruger så System.in.read() til at modtage input fra brugeren, men metoden opfører sig underligt, hvis man indtaster noget og trykker enten, springes de efterfølgende System.in.read() metodekald over, eller rettere så virker det som enter bliver registreret for hver af dem. Skal man eventuelt kalde close() på System.in.read(), jeg har dog læst i API-referencen, at den ikke har nogen effekt på System.in.read().

Kan nogen hjælpe
Avatar billede erikjacobsen Ekspert
06. december 1999 - 15:23 #1
Jah, mon ikke. System.in.read() læser en byte. Ikke en linie.
For at læse linier skal/kan du:

BufferedReader stdin = new BufferedReader(
      new InputStreamReader(System.in));


somestring = stdin.readLine();

Avatar billede hsp5 Nybegynder
06. december 1999 - 15:50 #2
Jeg har kun behov for at læse en byte, f.eks. et menu valg som følgende:
1. vælg undermenu1
2. vælg undermenu2
3. vælg undermenu3
Indtast valg :

så må det vel være nok at kunne modtage en byte, eller hvad?
Avatar billede erikjacobsen Ekspert
06. december 1999 - 20:39 #3
Ok, både og. System.in.read() bruger faktisk en liniebuffer når du taster
ind fra tastaturet.

Hvis du derfor taster

a<ENTER>

(hvis du forstår hvad jeg mener) og du læser med ...read() får du værdierne
97 13 og 10 for hhv 'a', CR og LF.  Du kunne derfor blot lave en metode
der læser det første tegn, og skipper til efter 10. På en unix-maskine
vil det måske se anderledes ud.

Jeg ved ikke om der indbygget er en mulighed for en et-tryks-read.
Avatar billede hsp5 Nybegynder
06. december 1999 - 21:21 #4
OK, tak skal du have. Lige en ting vedr. Buffered Reader, returnerer den ved tast på enter??

Af nysgerrighed tænkte jeg også lidt på performance, den er vel en anelse lavere ved buffered reader end ved input stream??
Avatar billede erikjacobsen Ekspert
06. december 1999 - 22:52 #5
Ja, mit første forslag giver en linie pr. <ENTER>. Og det er
både langsommere og fylder mere. Hvis det er et problem
kan du købe min 386 med 4 MB RAM :-)  Ja, altså lidt
langsommere, men ved interaktivt input fra brugeren må
det være ligegyldigt.
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