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

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.insom 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 Scannerobjekt ville se sådan ud:

Kode Forklaring
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Vi skaber et Scannerobjekt.
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 Scannerobjekt

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";
Erklæring og initialisering af en strengvariabel

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);
Erklæring og initialisering af en Scannervariabel

Alt til venstre for lighedstegnet er erklæringen af ​​en variabel ved navn, consolehvis type er Scanner. Du kunne i stedet kalde det s eller scannereller 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.insom datakilde for det nyoprettede Scannerobjekt.

Efter at have udført hele denne linje, vil vi have en Scannervariabel ved navn console , som vores program vil bruge til at læse data fra tastaturet.


4. Liste over metoder

I eksemplet ovenfor Scanner consolegemmer vores variabel en reference til et Scannerobjekt.

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);
Kald en metode på et objekt, der refereres til af en variabel

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();
Kald en metode uden at sende argumenter

Eksempel:

System.out.println();

5. Konsolindgang

Når vi har et Scannerobjekt, 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 doubletal.

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);
   }
}
Bemærk

Brugeren kan indtaste flere tal på en enkelt linje og adskille dem med mellemrum: klassens metoder Scannerved, hvordan de skal håndtere dette. Når det er sagt, læser programmet først tallene, efter at brugeren har trykket på Enter.



Scanner6. Klassens andre metoder

Ovenstående metoder er i øvrigt ikke alle, klassen Scannerhar at tilbyde. Den komplette liste over metoder ser nogenlunde sådan ud:

Metode Beskrivelse
nextByte()
Læser data og konverterer dem til enbyte
nextShort()
Læser data og konverterer dem til enshort
nextInt()
Læser data og konverterer dem til enint
nextLong()
Læser data og konverterer dem til enlong
nextFloat()
Læser data og konverterer dem til enfloat
nextDouble()
Læser data og konverterer dem til endouble
nextBoolean()
Læser data og konverterer dem til enboolean
next()
Læser ét "token". Tokens er adskilt af mellemrum eller tryk på enter-tasten
nextLine()
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
hasNextByte()
Er der en byte? Kan inputtet konverteres til en byte?
hasNextShort()
Er der en short? Kan inputtet konverteres til en short?
hasNextInt()
Er der en int? Kan inputtet konverteres til en int?
hasNextLong()
Er der en long? Kan inputtet konverteres til en long?
hasNextFloat()
Er der en float? Kan inputtet konverteres til en float?
hasNextDouble()
Er der en double? Kan inputtet konverteres til en double?
hasNextBoolean()
Er der en boolean? Kan inputtet konverteres til en boolean?
hasNext()
Er der en anden token?
hasNextLine()
Er der en anden linje?

7. Læsning af data fra en streng

Vi har tidligere nævnt, at Scannerklassen 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 Scannerobjektet, sender vi strengen i strstedet for System.inobjektet. Og nu scannervil objektet læse data fra strengen. Eksempel:

Programkode: Forklaring:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}


//a == 10; 
// b == 20; 
Skærmoutput vil være:30