Рубрики
Без рубрики

Проблема класса сканера nextLine() решена в JAVA

Привет всем! 😋 В этой статье освещается основная тема сканера и распространенная ошибка при использовании… С пометкой “Новички”, “веб-разработчики”, “java”, “компьютерные науки”.

Привет всем! 😋

В этой статье освещается основная тема сканера и распространенная ошибка при использовании метода 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”