Indholdsfortegnelse:
Video: WAYF - Sådan får du adgang til bibliotekets e ressourcer 2025
Indtil Java 1. 5 var det ikke nemt at få tekstindtastning fra brugeren i et konsolbaseret Java-program. Men med Java 1. 5 blev en ny klasse - kaldet
Scanner
- indført for at forenkle opgaven med at få input fra brugeren. Her bruger du klassen
Scanner
for at få enkle inputværdier fra brugeren. De teknikker, jeg præsenterer her, bruges i mange af de programmer, der vises i resten af denne bog.
Hvis du bruger en ældre version af Java, skal du stadig læse dette, fordi mange programmer bruger klassen
Scanner
.
Det enkle program nedenfor bruger klassen
Scanner
for at læse en heltalværdi fra brugeren og viser derefter værdien tilbage til konsollen for at verificere, at programmet har modtaget den værdi, som brugeren har indtastet. Her er et eksempel på konsolvinduet for dette program:
Indtast et helt tal: 5
Du indtastede 5.
Programmet begynder ved at vise meddelelsen
Indtast et helt tal:
på første linie. Så venter det på, at du indtaster et nummer. Når du skriver et nummer (f.eks. 5), og tryk på Enter-tasten, vises bekræftelsesmeddelelsen (
Du indtastede 5
.) På anden linje.
importer java. util. Scanner; @@ RA1
offentlig klasse ScannerApp
{
statisk scanner sc = ny scanner (System. In); @@ ra6
offentlig statisk tomgang hoved (String [] args)
{
System. ud. print ("Indtast et helt tal:"); @@ ra10
int x = sc. nextInt (); @@ Ra11
System. ud. println ("Du indtastede" + x + "."); @@ ra12
}
}
Importer scannerklassen i Java
Før du kan bruge klassen
Scanner
i et program, skal du importere det. For at gøre det koden du en
import
erklæring i begyndelsen af programmet, før klassedeklarationen:
import java. util. Scanner;
Bemærk, at
java
og
util
ikke er aktiveret, men
Scanner
er.
Hvis du bruger andre klasser i
java. util
pakke, kan du importere hele pakken ved at kode
import
sætningen som denne:
import java. util. *;
Deklarere og oprette et scannerobjekt i Java
Før du kan bruge klassen
Scanner
til at læse input fra konsollen, skal du erklære en
Scanner
variabel og oprette en instans i klassen
Scanner
. Du kan muligvis oprette variablen
Scanner
som en klassevariabel og oprette
Scanner
objektet i klassevariabelinitieringen, som vist i linje 6 i programmet ovenfor:
statisk scanner sc = ny scanner (system. in);
På den måde kan du bruge variablen
sc
i enhver metode i klassen.
For at oprette en
Scanner
-objekt, bruger du
nyt
søgeord efterfulgt af et opkald til
Scanner
klassekonstruktøren. Bemærk at klassen
Scanner
kræver en parameter, der angiver indgangsstrømmen, som indgangen kommer fra. Du kan bruge
System. i
her for at angive standard tastaturkonsolindgang.
Få input
For at læse en inputværdi fra brugeren kan du bruge en af metoderne i klassen
Scanner
, som er angivet nedenfor. Som du kan se, har den primitive datatype en separat metode.
Metode | Forklaring |
Boolean nextBoolean ()
|
Læser en
boolean
værdi fra brugeren. |
byte nextByte ()
|
Læses en
byte
værdi fra brugeren. |
double nextDouble ()
|
Læser en
dobbelt
værdi fra brugeren. |
float nextFloat ()
|
Læs en
float
værdi fra brugeren. |
int nextInt ()
|
Læses en
int
værdi fra brugeren. |
String nextLine ()
|
Læses en
String
værdi fra brugeren. |
længe nextLong ()
|
Læser en
lang
værdi fra brugeren. |
kort nextShort ()
|
Læses en
kort
værdi fra brugeren. |
Bemærk i den første kolonne i tabellen, at hver metodefortegnelse begynder med typen af den værdi, der returneres af metoden. Metoden
nextInt
giver f.eks. En
int
-værdi. Bemærk også, at hver af metoderne ender med et tomt sæt parenteser. Det betyder, at disse metoder ikke kræver parametre. Hvis en metode kræver parametre, er parametrene angivet inden for disse parenteser.
Da disse metoder læser en værdi fra brugeren og returnerer værdien, bruger du dem oftest i sætninger, som tildeler værdien til en variabel. Linje 11 læser for eksempel en
int
og tildeler den til en variabel med navnet
x
.
Når metoden
nextInt
udføres, venter programmet, at brugeren indtaster en værdi i konsolvinduet. For at lade brugeren vide, hvilken type input programmet forventer, skal du normalt kalde
Systemet. ud. print
metode, før du kalder en
Scanner
metode for at få input. Linje 10 kalder
System. ud. print
for at vise meddelelsen
Indtast et helt tal:
på konsollen. På den måde ved brugeren at programmet venter på input.
Hvis brugeren indtaster en værdi, der ikke kan konverteres til den korrekte type, kolliderer programmet, hvilket betyder, at det stopper brat. Når programmet kolliderer, viser det en kryptisk fejlmeddelelse, der angiver, hvad der forårsagede fejlen. Hvis du f.eks. Indtaster
tre
i stedet for et faktisk tal, ser konsolvinduet sig sådan ud:
Indtast et helt tal: tre Undtagelse i tråd "main" java. util. InputMismatchException
på java. util. Scanner. throwFor (Scanner. java: 819)
på java. util. Scanner. næste (Scanner. java: 1431)
på java. util. Scanner. nextInt (Scanner. java: 2040)
på java. util. Scanner. nextInt (Scanner. java: 2000)
på ScannerApp.main (ScannerApp. java: 11)
Denne meddelelse angiver, at der er opstået en undtagelse kaldet
InputMismatchException
, hvilket betyder at programmet forventede at se et helt tal men fik noget andet i stedet. Hvis du ikke ved, hvordan du kan sørge for undtagelser som disse, så programmet kan vise en venligere besked og give brugeren et nyt skud ved at indtaste en korrekt værdi, skal du klare det faktum, at hvis brugeren indtaster forkerte data, dit program styrter uforskammet.
Du kan forhindre, at
nextInt
og lignende metoder falder sammen med forkerte indtastningsdata ved først at bruge en af metoderne, der er angivet her for at teste det næste input for at sikre, at det er gyldigt.
Metode | Forklaring |
boolean hasNextBoolean ()
|
Returnerer
true
hvis den næste værdi indtastet af brugeren er en gyldig < boolean
værdi.
boolean hasNextByte () |
Returnerer
|
true
hvis den næste værdi, der indtastes af brugeren, er en gyldig værdi på
byte
.
boolean harNextDouble () |
Returnerer
|
true
, hvis den næste værdi indtastet af brugeren er en gyldig
dobbelt
værdi.
boolean hasNextFloat () |
Returnerer
|
true
hvis den næste værdi indtastet af brugeren er en gyldig
float
værdi.
boolean harNextInt () |
Returnerer
|
true
hvis den næste værdi indtastet af brugeren er en gyldig
int
værdi.
boolean hasNextLong () |
Returnerer
|
true
hvis den næste værdi, der indtastes af brugeren, er en gyldig
lang
værdi.
boolean hasNextShort () |
Returnerer
|
true
hvis den næste værdi, der indtastes af brugeren, er en gyldig
kort
værdi.
|