1. Четене от конзолата с помощта наSystem.in
В предишните уроци се запознахме с командите за извеждане на информация на екрана. За да направим това, използвахме обекта и System.out
неговите методи. Това е просто и удобно.print()
println()
Но, Howто вероятно вече се досещате, показването на информация на екрана не е достатъчно за нас. Целта на повечето програми е да направят нещо полезно за потребителя. Това означава, че много често е необходимо потребителят да може да въвежда данни от клавиатурата.
Точно Howто в случая с изхода, имаме и специален обект за въвеждане на данни — System.in
. Но, за наше съжаление, това не е толкова удобно, колкото бихме искали. Позволява ни да четем данни от клавиатурата символ по знак.
За да подобрим това, ще използваме друг клас, който, когато е сдвоен с System.in
обекта, ще ни даде всичко, от което се нуждаем. От дълго време Java има класове, подходящи за всеки повод. И сега ще се запознаем с един от тях.
2. Scanner
клас
Класът Scanner
(пълно име: java.util.Scanner
) може да чете данни от различни източници, например конзола, файлове и интернет. Ако искаме да чете данни от клавиатурата, тогава трябва да предадем обекта System.in
като аргумент, който ще служи като източник на данни. И тогава обектът Scanner ще разбере Howво да прави с него.
Четенето от клавиатурата с помощта на Scanner
обект би изглеждало така:
Код | Обяснение |
---|---|
|
Ние създаваме Scanner обект. Четем ред текст от клавиатурата. Четем число от клавиатурата. |
Изглежда лесно, но наистина ли е толкова просто?
Мисля, че трябва да имате куп въпроси и сега ще отговорим на тях.
Но първо, нека демонстрираме пример за пълна програма, която използва 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. Създаване на Scanner
обект
Първият въпрос е Howва е тази линия Scanner console = new Scanner (System.in);
?
Този ред може да е объркващ, но ще виждате подобни неща през цялото време. Затова смятаме, че е важно да обясним Howво се случва тук.
Спомнете си How обикновено създаваме променлива с текст:
String str = "text";
Първо записваме типа на променливата ( String
), след това нейното име ( str
) и накрая след знака за equalsство записваме стойността.
Нашата объркваща линия всъщност е същата:
Scanner console = new Scanner(System.in);
Scanner
променлива
Всичко отляво на знака за equalsство е декларацията на променлива с име, console
чийто тип е Scanner
. Вместо това можете да го наречете s
or scanner
or дори keyboard
. Тогава codeът ще изглежда така:
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();
Мисля, че това прави всичко много по-ясно.
Но codeът вдясно от знака за equalsство е малко по-сложен. Сега имам предвид new Scanner(System.in);
Това каза, че тук също не се случва нищо свръхестествено.
В този code казваме на Java машината: създайте нов обект (ключовата new
дума), чийто тип е Scanner
, предавайки обекта System.in
като източник на данни за новосъздадения Scanner
обект.
След като изпълним целия този ред, ще имаме Scanner
променлива с име console
, която нашата програма ще използва за четене на данни от клавиатурата.
4. Списък на методите
В горния пример нашата Scanner
console
променлива съхранява препратка към Scanner
обект.
За да извикате методи на обект, към който се отнася променлива, пишете точка след името на променливата, последвана от името на метода и всички аргументи. Общият вид на командата е следният:
variable.method(arguments);
Примери:
System.out.println("Hello");
System.out.println(1);
Ако не планирате да предавате аргументи на функция, тогава просто пишете празни скоби:
variable.method();
Пример:
System.out.println();
5. Конзолен вход
Когато имаме Scanner
обект, е лесно да получим данни от клавиатурата.
За да прочетете ред от клавиатурата , имате нужда от тази команда:
String str = console.nextLine();
Когато изпълнението на програмата достигне този ред, тя ще спре и ще изчака потребителя да въведе данни и да натисне enter. Тогава всичко, въведено от потребителя, се съхранява в променливата str
.
За да прочетете число от клавиатурата , имате нужда от тази команда:
int number = console.nextInt();
Всичко тук е като предишната команда. Когато изпълнението на програмата достигне този ред, тя ще спре и ще изчака потребителя да въведе данни и да натисне enter. След това всичко въведено от потребителя се преобразува в число и се съхранява в променливата number
.
Ако потребителят е въвел данни, които не могат да бъдат преобразувани в цяло число, програмата ще генерира грешка и ще излезе.
За да прочетете дробно число от клавиатурата , имате нужда от тази команда:
double number = console.nextDouble();
Този оператор е много подобен на този с nextInt()
метода, само че проверява дали въведените данни могат да бъдат преобразувани в double
число.
Пример за програма, която чете две числа от клавиатурата и извежда сумата им на екрана:
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);
}
}
Потребителят може да въведе няколко числа на един ред, като ги раздели с интервали: методите на Scanner
класа знаят How да се справят с това. Въпреки това, програмата чете числата само след като потребителят натисне Enter
.
6. Други методи на Scanner
класа
Между другото, методите по-горе не са всичко, което класът Scanner
може да предложи. Пълният списък с методи изглежда така:
Метод | Описание |
---|---|
|
Чете данни и ги преобразува в abyte |
|
Чете данни и ги преобразува в ashort |
|
Чете данни и ги преобразува вint |
|
Чете данни и ги преобразува в along |
|
Чете данни и ги преобразува в afloat |
|
Чете данни и ги преобразува в adouble |
|
Чете данни и ги преобразува в aboolean |
|
Чете един "жетон". Токените се разделят с интервали or натискане на клавиша enter |
|
Чете цял ред |
Има и методи, които ви позволяват да проверявате следващия токен във входа, без действително да го извличате (за да знаете кой метод да използвате, за да го прочетете).
Метод | Описание |
---|---|
|
Има ли byte ? Може ли входът да бъде преобразуван в byte ? |
|
Има ли short ? Може ли входът да бъде преобразуван в short ? |
|
Има ли int ? Може ли входът да бъде преобразуван в int ? |
|
Има ли long ? Може ли входът да бъде преобразуван в long ? |
|
Има ли float ? Може ли входът да бъде преобразуван в float ? |
|
Има ли double ? Може ли входът да бъде преобразуван в double ? |
|
Има ли boolean ? Може ли входът да бъде преобразуван в boolean ? |
|
Има ли друг жетон? |
|
Има ли друга линия? |
7. Четене на данни от низ
По-рано споменахме, че Scanner
класът може да чете данни от различни източници. Един от тези източници е низ от текст .
Изглежда нещо подобно:
String str = "text";
Scanner scanner = new Scanner(str);
Когато създаваме Scanner
обекта, ние предаваме низа str
instead of System.in
обекта. И сега scanner
обектът ще прочете данни от низа. Пример:
Програмен code: | Обяснение: |
---|---|
|
// a == 10;
// b == 20;
Изходът на екрана ще бъде: |
GO TO FULL VERSION