1. Aflæsning fra konsollen vhaSystem.in
I de tidligere lektioner stiftede vi bekendtskab med kommandoerne til at vise information på skærmen. For at gøre dette har vi brugt objektet System.out
og dets print()
og println()
metoder. Det er enkelt og bekvemt.
Men som du sikkert allerede har gættet, er det ikke nok for os at vise information på skærmen. Formålet med de fleste programmer er at gøre noget nyttigt for brugeren. Det betyder, at det meget ofte er nødvendigt for brugeren at kunne indtaste data fra tastaturet.
Ligesom det var tilfældet for output, har vi også et særligt objekt til datainput — System.in
. Men desværre for os er det ikke så praktisk, som vi gerne ville. Det lader os læse data fra tastaturet et tegn ad gangen.
For at forbedre dette, vil vi bruge en anden klasse, der, når den er parret med objektet System.in
, vil give os alt, hvad vi har brug for. I lang tid har Java haft klasser, der passer til enhver lejlighed. Og vi lærer en af dem at kende nu.
2. Scanner
klasse
Klassen Scanner
(fulde navn: java.util.Scanner
) kan læse data fra forskellige kilder, f.eks. konsollen, filer og internettet. Hvis vi vil have det til at læse data fra tastaturet, så skal vi sende objektet ind System.in
som et argument, der vil tjene som datakilden. Og så finder Scanner-objektet ud af, hvad det skal gøre med det.
At læse fra tastaturet ved hjælp af et Scanner
objekt ville se sådan ud:
Kode | Forklaring |
---|---|
|
Vi skaber et Scanner objekt. Vi læser en tekstlinje fra tastaturet. Vi læser et tal fra tastaturet. |
Det ser nemt ud, men er det virkelig så enkelt?
Jeg tror, du skal have en masse spørgsmål, og nu vil vi besvare dem.
Men lad os først demonstrere et eksempel på et komplet program, der bruger klassen Scanner
:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
3. Oprettelse af et Scanner
objekt
Det første spørgsmål er, hvad er denne linje Scanner console = new Scanner (System.in);
?
Denne linje kan være forvirrende, men du vil se lignende ting hele tiden. Så vi synes, det er vigtigt at forklare, hvad der foregår her.
Husk, hvordan vi normalt opretter en variabel med tekst:
String str = "text";
Først skriver vi variablens type ( String
), derefter dens navn ( str
), og til sidst, efter lighedstegnet, skriver vi værdien.
Vores forvirrende linje er faktisk den samme:
Scanner console = new Scanner(System.in);
Alt til venstre for lighedstegnet er erklæringen af en variabel ved navn, console
hvis type er Scanner
. Du kunne i stedet kalde det s
eller scanner
eller endda keyboard
. Så ville koden se sådan ud:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
Jeg tror, det gør alting meget mere klart.
Men koden til højre for lighedstegnet er lidt mere kompliceret. Jeg henviser nu til. new Scanner(System.in);
Når det er sagt, sker der heller ikke noget overnaturligt her.
I denne kode fortæller vi Java-maskinen: opret et nyt objekt (nøgleordet new
), hvis type er Scanner
, og indfør objektet System.in
som datakilde for det nyoprettede Scanner
objekt.
Efter at have udført hele denne linje, vil vi have en Scanner
variabel ved navn console
, som vores program vil bruge til at læse data fra tastaturet.
4. Liste over metoder
I eksemplet ovenfor Scanner
console
gemmer vores variabel en reference til et Scanner
objekt.
For at kalde metoder på et objekt, der refereres til af en variabel, skriver du et punktum efter navnet på variablen, efterfulgt af metodenavnet og eventuelle argumenter. Kommandoens generelle udseende er som følger:
variable.method(arguments);
Eksempler:
System.out.println("Hello");
System.out.println(1);
Hvis du ikke planlægger at sende argumenter til en funktion, så skriver du bare tomme parenteser:
variable.method();
Eksempel:
System.out.println();
5. Konsolindgang
Når vi har et Scanner
objekt, er det nemt at hente data fra tastaturet.
For at læse en linje fra tastaturet skal du bruge denne kommando:
String str = console.nextLine();
Når afviklingen af programmet når denne linje, vil det pause og vente på, at brugeren indtaster data og trykker enter. Så er alt, hvad brugeren har indtastet, gemt i variablen str
.
For at læse et tal fra tastaturet skal du bruge denne kommando:
int number = console.nextInt();
Alt her er som den forrige kommando. Når afviklingen af programmet når denne linje, vil det pause og vente på, at brugeren indtaster data og trykker enter. Derefter konverteres alt, hvad brugeren har indtastet, til et tal og gemmes i variablen number
.
Hvis brugeren indtastede data, der ikke kan konverteres til et heltal, vil programmet generere en fejl og afslutte.
For at læse et brøktal fra tastaturet skal du bruge denne kommando:
double number = console.nextDouble();
Denne erklæring minder meget om den med nextInt()
metoden, kun den kontrollerer at de indtastede data kan konverteres til et double
tal.
Eksempel på et program, der læser to tal fra tastaturet og viser deres sum på skærmen:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
}
Brugeren kan indtaste flere tal på en enkelt linje og adskille dem med mellemrum: klassens metoder Scanner
ved, hvordan de skal håndtere dette. Når det er sagt, læser programmet først tallene, efter at brugeren har trykket på Enter
.
Scanner
6. Klassens andre metoder
Ovenstående metoder er i øvrigt ikke alle, klassen Scanner
har at tilbyde. Den komplette liste over metoder ser nogenlunde sådan ud:
Metode | Beskrivelse |
---|---|
|
Læser data og konverterer dem til enbyte |
|
Læser data og konverterer dem til enshort |
|
Læser data og konverterer dem til enint |
|
Læser data og konverterer dem til enlong |
|
Læser data og konverterer dem til enfloat |
|
Læser data og konverterer dem til endouble |
|
Læser data og konverterer dem til enboolean |
|
Læser ét "token". Tokens er adskilt af mellemrum eller tryk på enter-tasten |
|
Læser en hel linje |
Der er også metoder, der lader dig tjekke det næste token i inputtet uden faktisk at hente det (for at vide, hvilken metode du skal bruge til at læse det).
Metode | Beskrivelse |
---|---|
|
Er der en byte ? Kan inputtet konverteres til en byte ? |
|
Er der en short ? Kan inputtet konverteres til en short ? |
|
Er der en int ? Kan inputtet konverteres til en int ? |
|
Er der en long ? Kan inputtet konverteres til en long ? |
|
Er der en float ? Kan inputtet konverteres til en float ? |
|
Er der en double ? Kan inputtet konverteres til en double ? |
|
Er der en boolean ? Kan inputtet konverteres til en boolean ? |
|
Er der en anden token? |
|
Er der en anden linje? |
7. Læsning af data fra en streng
Vi har tidligere nævnt, at Scanner
klassen kan læse data fra forskellige kilder. En af disse kilder er en tekststreng .
Det ser sådan ud:
String str = "text";
Scanner scanner = new Scanner(str);
Når vi opretter Scanner
objektet, sender vi strengen i str
stedet for System.in
objektet. Og nu scanner
vil objektet læse data fra strengen. Eksempel:
Programkode: | Forklaring: |
---|---|
|
//a == 10;
// b == 20;
Skærmoutput vil være: |
GO TO FULL VERSION