JAVA에서 해결된 스캐너 클래스 nextLine() 문제

안녕하세요 여러분!😋

이 기사에서는 스캐너의 기본 주제와 nextLine() 메서드를 사용하는 동안 발생하는 일반적인 오류를 강조합니다. 그럼 늦었지만 본론으로 들어가 볼까요!🤿

내용물


  • What is the Scanner class?
  • Some basic methods in Scanner class
  • Why nextLine() method skips input?

  • 스캐너 클래스란?



    스캐너 클래스는 java.util 패키지에 속합니다. 파일 객체를 전달하여 파일을 읽는 데 사용되는 int, char, double(모든 기본 유형), string과 같은 데이터 유형에 대한 입력을 얻는 데 사용됩니다. wrapper 클래스 개체에도 사용할 수 있습니다.

    스캐너 객체를 통해 스캐너 클래스의 메서드에 액세스할 수 있습니다. 객체를 생성하는 동안 매개변수로 System.in를 전달합니다. 이것은 입력이 표준 입력(키보드)을 통해 제공될 것임을 Java 컴파일러에 알려줍니다.

    //creating a scanner object
    Scanner scan=new Scanner(System.in);
    

    Scanner 클래스의 몇 가지 기본 메서드



    스캐너 클래스를 사용하는 동안 알아야 할 몇 가지 기본 방법은 다음과 같습니다.

  • nextInt(): 입력의 다음 토큰을 int 값으로 스캔합니다.

  •  int a=scan.nextInt();  
    


  • nextDouble(): 입력의 다음 토큰을 double 값으로 스캔합니다.

  • double a=scan.nextDouble();
    

  • nextLine(): 현재 위치에서 줄 구분자를 찾을 때까지 스캔합니다.

  • String s=scan.nextLine();
    

    이것은 다음 섹션에서 더 명확하게 설명될 것입니다. Scanner 클래스에는 다른 다양한 메소드가 있으며 이를 확인할 수 있습니다here.

    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_num , name , amount에 대한 입력을 받고 있습니다earlier. 이제 출력을 확인해보자.

    예상 출력:



    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
    

  • >이제 우리는 nextLine()가 공백을 허용하는 입력으로 문자열을 취하는 데 사용된다는 것을 알고 있습니다.

  • 따라서 nextLine() 를 사용하면 커서가 있는 곳에서 스캔하고 빈 공간을 입력으로 사용합니다. 이것이 name 에 대해 빈 줄이 있는 이유입니다.

    이 문제를 해결하는 방법은 무엇입니까?


  • int를 입력으로 받은 직후에 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()를 사용하여 정수에 대한 전체 줄을 스캔하고 Integer.parseInt()를 사용하여 int로 변환할 수 있으므로 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();
    

    따라서 int, double, float 등과 같은 입력을 얻기 위해 모든 방법을 사용한 후 nextLine()를 사용할 때마다 이러한 접근 방식을 적용해야 합니다.

    이 글을 읽고 계시다면 글의 끝부분에 도달하셨고 오늘 새로운 사실을 알게 되셨습니다.😍

    해피 자바잉!😊

    좋은 웹페이지 즐겨찾기