1. Lezen vanaf de console met behulp vanSystem.in
In de vorige lessen hebben we kennis gemaakt met de commando's voor het weergeven van informatie op het scherm. Om dit te doen, hebben we het System.out
object en zijn print()
en println()
methoden gebruikt. Het is eenvoudig en handig.
Maar zoals je waarschijnlijk al geraden hebt, is het voor ons niet genoeg om informatie op het scherm weer te geven. Het doel van de meeste programma's is om iets nuttigs te doen voor de gebruiker. Dat betekent dat het heel vaak nodig is dat de gebruiker gegevens via het toetsenbord kan invoeren.
Net als bij uitvoer hebben we ook een speciaal object voor gegevensinvoer — System.in
. Maar helaas voor ons is het niet zo handig als we zouden willen. Hiermee kunnen we gegevens van het toetsenbord teken voor teken lezen .
Om dit te verbeteren, zullen we een andere klasse gebruiken die, in combinatie met het System.in
object, ons alles zal geven wat we nodig hebben. Java biedt al geruime tijd lessen voor elke gelegenheid. En een van hen zullen we nu leren kennen.
2. Scanner
klasse
De Scanner
klasse (volledige naam: java.util.Scanner
) kan gegevens uit verschillende bronnen lezen, bijvoorbeeld de console, bestanden en internet. Als we willen dat het gegevens van het toetsenbord leest, moeten we het System.in
object doorgeven als een argument dat als gegevensbron zal dienen. En dan zal het Scanner-object uitzoeken wat het ermee moet doen.
Lezen vanaf het toetsenbord met behulp van een Scanner
object ziet er ongeveer zo uit:
Code | Uitleg |
---|---|
|
We maken een Scanner voorwerp. We lezen een regel tekst van het toetsenbord. We lezen een cijfer van het toetsenbord. |
Het lijkt eenvoudig, maar is het ook zo eenvoudig?
Ik denk dat je een heleboel vragen hebt, en nu zullen we ze beantwoorden.
Maar laten we eerst een voorbeeld demonstreren van een compleet programma dat de Scanner
klasse gebruikt:
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. Een Scanner
object maken
De eerste vraag is wat is deze regel Scanner console = new Scanner (System.in);
?
Deze regel kan verwarrend zijn, maar u zult de hele tijd soortgelijke dingen zien. We vinden het dus belangrijk om uit te leggen wat hier aan de hand is.
Bedenk hoe we gewoonlijk een variabele met tekst maken:
String str = "text";
Eerst schrijven we het type van de variabele ( String
), dan de naam ( str
), en ten slotte, na het gelijkteken, schrijven we de waarde.
Onze verbijsterende lijn is eigenlijk hetzelfde:
Scanner console = new Scanner(System.in);
Alles links van het gelijkteken is de declaratie van een variabele met de naam console
waarvan het type is Scanner
. s
Je zou het in plaats daarvan of scanner
of zelfs kunnen noemen keyboard
. Dan zou de code er zo uitzien:
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();
Ik denk dat dat alles een stuk overzichtelijker maakt.
Maar de code rechts van het gelijkteken is iets gecompliceerder. Ik verwijs nu naar new Scanner(System.in);
Dat gezegd hebbende, er gebeurt hier ook niets bovennatuurlijks.
In deze code vertellen we de Java-machine: maak een nieuw object (het new
trefwoord) waarvan het type is Scanner
, en geef het System.in
object door als de gegevensbron voor het nieuw gemaakte Scanner
object.
Nadat we deze hele regel hebben uitgevoerd, hebben we een Scanner
variabele met de naam console
die ons programma zal gebruiken om gegevens van het toetsenbord te lezen.
4. Lijst met methoden
In het bovenstaande voorbeeld Scanner
console
slaat onze variabele een verwijzing naar een Scanner
object op.
Om methoden aan te roepen op een object waarnaar wordt verwezen door een variabele, schrijft u een punt achter de naam van de variabele, gevolgd door de naam van de methode en eventuele argumenten. Het algemene uiterlijk van de opdracht is als volgt:
variable.method(arguments);
Voorbeelden:
System.out.println("Hello");
System.out.println(1);
Als u niet van plan bent om argumenten aan een functie door te geven, schrijft u gewoon lege haakjes:
variable.method();
Voorbeeld:
System.out.println();
5. Console-invoer
Als we een object hebben Scanner
, is het gemakkelijk om gegevens van het toetsenbord te krijgen.
Om een regel van het toetsenbord te lezen , hebt u deze opdracht nodig:
String str = console.nextLine();
Wanneer de uitvoering van het programma deze regel bereikt, zal het pauzeren en wachten tot de gebruiker gegevens invoert en op Enter drukt. Vervolgens wordt alles wat de gebruiker heeft ingevoerd opgeslagen in de variabele str
.
Om een getal van het toetsenbord te lezen , heb je deze opdracht nodig:
int number = console.nextInt();
Alles is hier zoals het vorige commando. Wanneer de uitvoering van het programma deze regel bereikt, zal het pauzeren en wachten tot de gebruiker gegevens invoert en op Enter drukt. Daarna wordt alles wat de gebruiker heeft ingevoerd omgezet naar een getal en opgeslagen in de number
variabele.
Als de gebruiker gegevens heeft ingevoerd die niet kunnen worden geconverteerd naar een geheel getal, genereert het programma een fout en wordt het afgesloten.
Om een gebroken getal van het toetsenbord te lezen , hebt u deze opdracht nodig:
double number = console.nextDouble();
Deze verklaring lijkt erg op die met de nextInt()
methode, alleen wordt gecontroleerd of de ingevoerde gegevens kunnen worden omgezet in een double
getal.
Voorbeeld van een programma dat twee getallen van het toetsenbord leest en hun som op het scherm weergeeft:
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);
}
}
De gebruiker kan meerdere getallen op een enkele regel invoeren, gescheiden door spaties: de methoden van de Scanner
klasse weten hoe ze hiermee om moeten gaan. Dat gezegd hebbende, leest het programma de cijfers pas nadat de gebruiker op drukt Enter
.
6. Andere methoden van de Scanner
klas
Trouwens, de bovenstaande methoden zijn niet alles wat de Scanner
klas te bieden heeft. De volledige lijst met methoden ziet er ongeveer zo uit:
Methode | Beschrijving |
---|---|
|
Leest gegevens en converteert deze naar eenbyte |
|
Leest gegevens en converteert deze naar eenshort |
|
Leest gegevens en converteert deze naar eenint |
|
Leest gegevens en converteert deze naar eenlong |
|
Leest gegevens en converteert deze naar eenfloat |
|
Leest gegevens en converteert deze naar eendouble |
|
Leest gegevens en converteert deze naar eenboolean |
|
Leest een "token". Tokens worden gescheiden door spaties of drukken op de Enter-toets |
|
Leest een hele regel |
Er zijn ook methoden waarmee u het volgende token in de invoer kunt controleren zonder het daadwerkelijk op te halen (om te weten welke methode u moet gebruiken om het te lezen).
Methode | Beschrijving |
---|---|
|
Is er een byte ? Kan de invoer worden geconverteerd naar een byte ? |
|
Is er een short ? Kan de invoer worden geconverteerd naar een short ? |
|
Is er een int ? Kan de invoer worden geconverteerd naar een int ? |
|
Is er een long ? Kan de invoer worden geconverteerd naar een long ? |
|
Is er een float ? Kan de invoer worden geconverteerd naar een float ? |
|
Is er een double ? Kan de invoer worden geconverteerd naar een double ? |
|
Is er een boolean ? Kan de invoer worden geconverteerd naar een boolean ? |
|
Is er nog een teken? |
|
Is er nog een lijn? |
7. Gegevens uit een string lezen
We hebben eerder vermeld dat de Scanner
klas gegevens uit verschillende bronnen kan lezen. Een van die bronnen is een reeks tekst .
Het ziet er ongeveer zo uit:
String str = "text";
Scanner scanner = new Scanner(str);
Bij het maken van het Scanner
object geven we de string door str
in plaats van het System.in
object. En nu scanner
zal het object gegevens uit de string lezen. Voorbeeld:
Programmacode: | Uitleg: |
---|---|
|
// een == 10;
// b == 20;
De schermuitvoer is: |
GO TO FULL VERSION