Привет всем! 😋
В этой статье освещается основная тема сканера и распространенная ошибка при использовании метода nextLine(). Так почему же поздно, давайте углубимся в тему!🤿
содержание
- Что такое класс сканера?
- Некоторые основные методы в классе Scanner
- Почему метод nextLine() пропускает ввод?
Что такое класс сканера?
Класс scanner принадлежит java.util package. Он используется для получения входных данных для таких типов данных, как int, char, double (все примитивные типы), string, используемых для чтения файла путем передачи объекта file. Он также может быть использован для объектов класса wrapper .
Мы можем получить доступ к методам класса scanner с помощью объекта scanner. При создании объекта мы передаем System.in
в качестве параметра. Это сообщает компилятору java, что ввод будет осуществляться через стандартный ввод (клавиатура).
//creating a scanner object Scanner scan=new Scanner(System.in);
Некоторые основные методы в классе Scanner
Некоторые из основных методов, которые вам необходимо знать при использовании класса scanner, следующие
- nextInt(): Он сканирует следующий токен ввода как значение int.
int a=scan.nextInt();
- nextDouble(): Он сканирует следующий токен ввода как двойное значение.
double a=scan.nextDouble();
- следующая строка(): Он сканирует с текущей позиции, пока не найдет разделитель строк.
String s=scan.nextLine();
Это будет объяснено более четко в следующем разделе. В классе Scanner есть различные другие методы, вы можете проверить это здесь .
Почему метод nextLine() пропускает ввод?
Итак, чтобы понять это ясно, давайте начнем с примера.
public class ScannerExample { public static void main(String args[]){ Scanner sc=new Scanner(System.in); System.out.println("Enter account number"); int account_num=sc.nextInt(); System.out.println("Enter account holder's name"); String name=sc.nextLine(); System.out.println("Enter the amount to deposit"); double amount=sc.nextInt(); System.out.print("Account number: "+account_num); System.out.print("Name: "+name); System.out.print("Amount: "+amount); } }
Здесь мы принимаем входные данные для 3 переменных номер учетной записи
, имя
, количество
с использованием соответствующих методов сканирования, которые мы изучили ранее . Давайте теперь проверим результат.
Ожидаемый Результат:
Account number: 154623 Name: john doe Amount: 4000.0
На выходе мы получаем:
Account number: 154623 Name: Amount: 4000.0
Заметили ли вы разницу? 🤔 Ввод, который мы вводим с помощью nextLine()
для name
, пропускается и продолжается следующим вводом.
Почему это произошло?
Итак, когда мы использовали nextInt()
, чтобы получить account_num
он сканирует до конца ввода 154623, и курсор остается там после считывания числа следующим образом
154623👆 //cursor position after reading input
- >Теперь мы знаем
Следующая строка ()
()
Итак, когда мы используем next Line()
, он сканирует с того места, где находится курсор, и принимает пустое пространство в качестве входных данных. Вот почему мы получили пустую строку для name
.
Как это решить?
- Мы можем просто использовать метод
nextLine()
сразу после ввода в качестве входных данных, поэтому он убирает пустое пространство и позволяет нам вводить данные дляname
. Код выглядит примерно так:
System.out.println("Enter account number"); int account_num=sc.nextInt(); sc.nextLine() //this takes away the empty space as input System.out.println("Enter account holder's name"); String name=sc.nextLine();
- Мы также можем просканировать всю строку на наличие целого числа с помощью
nextLine()
и преобразовать ее в int с помощьюInteger.parseInt()
, поэтомуnextLine()
считывает до конца строки иparseInt()
преобразует данные в int.
System.out.println("Enter account number"); int account_num=Integer.parseInt(sc.nextLine()); System.out.println("Enter account holder's name"); String name=sc.nextLine();
Итак, всякий раз, когда вы используете nextLine()
после использования любых методов для получения входных данных, таких как int, double, float и т.д., Убедитесь, что вы применяете эти подходы.
Если вы читаете эту строку, значит, вы дошли до конца статьи и сегодня узнали что-то новое. 😍
Счастливого Java-инга! 😊
Оригинал: “https://dev.to/laasyasetty/scanner-class-nextline-issue-resolved-in-java-4nc8”