next(), nextInt(), nextFloat(), nextLine()

최혜원·2023년 5월 23일
3

JAVA

목록 보기
3/5
post-thumbnail

next(), nextLine()의 차이점

next(), nextLine()은 Scanner 클래스의 메소드이다.
공통점은 둘 다 문자열로 반환시켜주고 차이점은 nextLine()메소드는 Enter를 치기 전까지 쓴 문자열 모두 반환한다는 것이고,
next()메소드는 공백(space) 전까지 입력받은 문자열을 반환한다는 것이다.

  • .next()
    • 콤마(,),공백(\t),엔터(\n)를 기준으로 문자열을 잘라서 입력받음
    • 따라서 문자열 내에 엔터, 공백등은 입력되지 않음
  • .nextLine()
    • 엔터(/n)까지의 문자열 전체를 받음
    • 문자열 내에 \n을 포함해서 받음을 주의

그 이유는?

next()는 개행문자(Enter)를 무시하고 입력을 받고
nextLine()는 한 줄 단위로 입력을 받기 때문에 개행문자(Enter)도 포함한다.
좀 더 직관적으로 설명하자면 위 처럼 1234를 입력하고 Enter를 쳤다면 버퍼에 1234**n이 존재한다.
이 때 nextInt()가 버퍼의 내용을 가져올 때 분리자를 제외하고 가져오기 때문에 1234만 가져오게 된다.
그러면 버퍼에
\n이 남아있게 되는데 nextLine()은 공백과 개행문자(Enter) 인 분리자를 포함시키기 때문에 줄이 바뀔 때 \n만 가져오고 프로그램이 종료되는 것이다.**

★☆next(),nextInt(),nextFloat(),nextLine() 섞어쓸때 생기는 오류☆★- nextInt(),nextFloat()를 쓰고 next(), nextLine() 쓸경우

  • next()를 쓰고 nextLine() 쓸경우
    이유 : nextInt(), nextFloat(), next()를 한 뒤 남은 개행 문자를 읽기 때문이다.
    해결 : nextInt(), nextFloat(), next() 실행 후 nextLine(), next()을 쓰기 전에 nextLine() 한번 실행해준다.
  • nextLine() 후에 nextInt(), nextFloat(), next() 쓰는건 오류x

  1. 입출력 함수 사용 시 주의사항

    • 타입 별로 입력을 받는 방법

      • int를 입력 받을 때는 nextInt 메서드를 이용한다.
      • char를 입력 받을 때는 (char)System.in.read 메서드를 이용한다.
      • char를 여러개 입력 받을 때는 nextLine 메서드를 이용한다.
    • 입력을 여러 줄로 받을 경우

      • int를 받을 경우 두 줄로 입력 받아도 문제가 전혀 없다.

      • 문자를 받을 경우 두 줄로 입력 받을 때 잘 되지 않는다.

        -> 첫 A를 입력하고 엔터를 누르는 순간! \n 엔터 값이 먹히고 해당 값이 들어가기 때문이다.

        문자를 여러줄 받는 경우, nextLine 메서드를 이용해서 한 줄 씩 읽어서 처리하자.

        ※ next() 개행문자를 무시하고 입력을 받음, 즉 숫자를 치고 엔터를 누를경우 엔터 전까지만 입력을 받음.

        ※ nextLine() 한줄 단위로 입력 받기 때문에, 개행문자도 한 줄로 인식합니다.

    • 입력 받을 개수가 가변적인데 그 사이에 공백이 있을 경우

      • int는 nextInt로 char는 nextLine으로 받으면 문제가 발생한다.

        -> 숫자를 입력받고 엔터를 치면 Exception이 발생한다. nextInt()로 입력을 받기 때문에 개행문자 전까지만 입력을 받고 개행문자(\n)는 다음 nextLine이 읽었기 때문이다. 이를 해결하기 위해선 nextInt() 와 nextLine() 함수 사이에 nextLine()함수를 한번 더 사용해 개행문자를 제거하도록 한다.

      • nextLine 메소드를 한번 더 사용해서 해결할 수 있다.

        -> nextLine() 를 중간에 사용함으로써 개행문자 제거


      원인 : nextFloat에 숫자 입력하면서 한 줄이 바뀔때

      개행문자(한줄 띄우기 - \n)가 포함되었기 때문

      nextInt()로 입력을 받기 때문에 개행문자 전까지만 입력을 받고

      개행문자(\n)는 다음 nextLine이 읽었기 때문이다.

      sc.nextLine(); 한 줄 추가

      nextLine() 를 중간에 사용함으로써 개행문자 제거

      해결!!!

profile
어제보다 나은 오늘

0개의 댓글