JAVA를 자바
[2] user input을 받는 Scanner 클래스와 nextLine, nextInt, nextDouble, next
지식보부상님
2020. 12. 28. 20:41
C언어에서 scanf와 같은 역할을 하는 애를 알아볼거에요!
유저의 input을 읽기 위해서는 java.util 패키지에 포함되어 있는
Scanner 클래스를 이용하면 됩니다!
Scanner in = new Scanner(System.in);
System.out.println("What's your dog's name?");
String name = in.nextLine();
System.out.println("My dog's name is "+ name);
라고 하면
다음과 같은 결과를 볼 수 있습니다!
즉 nextLine()은 유저의 입력 전체(엔터 전까지)를 받아들이는 메소드에요
nextInt()는 유저의 "정수" 입력을 받는 메소드이고,
nextDouble()은 유저의 "실수"입력을 받는 메소드에요!
따라서 nextInt 의 예제를 보면
Scanner in = new Scanner(System.in);
System.out.println("How old is your dog?");
int age = in.nextInt();
System.out.println("My dog is "+ age +" years old");
와 같은 결과를 출력함을 알 수 있어요!
next()는 유저의 입력 중 한 단어만 받아들여요!
즉 공백 전까지만 받는 거에요.
다음과 같은 예제를 생각해봅시다!
Scanner in = new Scanner(System.in);
System.out.println("What's your dog's name?");
String name = in.next();
System.out.println("My dog's name is "+ name);
보이시죠?
저는 darong and porong이라고 입력했지만 "darong"만 name 변수에 저장했네요!
next는 치명적인 단점이 존재해서 사용을 비추해요
다음과 같은 예제를 볼까요?
Scanner in = new Scanner(System.in);
System.out.println("What's your dog's name?");
String name = in.next();
System.out.println("My dog's name is "+ name);
System.out.println("What's your dog's name?");
name = in.nextLine();
System.out.println("My dog's name is "+ name);
위와 같이 대참사가 일어나는 경우가 발생해요!
분명 name = in.nextLine(); 이라는 코드를 작성했는데
인풋을 안받는 어이없는 상황이?!
이건 next가 스페이스(공백)을 기준으로 공백 전까지의 인풋만을 받아오기 때문에
공백 뒤부터는 아직까지 남아있는 것이 되어서 nextLine() 에서 남은 모두를 받아오는 상황이 발생한거에요!
한줄 요약)
next 보다는 nextLine()을 사용하여 split을 이용해 나눕시다!