Scanner sc = new Scanner(System.in);
System.in 은 입력장치(키보드), System.out은 출력장치(모니터)이다.
Scanner은 키보드에서 입력된 문자열을 읽어들인다.
String inputStr = sc.nextLine();
sc.nextLine();은 키보드로부터 입력받은 문장을 읽어들인다.
엔터(종결신호)까지 모두 읽어들인 후 스캐너 버퍼(sc)에 담아서 아무것도 남기지 않는다.
*문자열 형변환 메소드
byte b = (byte) (Byte.parseByte(inputStr) + 10);
문자열(String)을 byte 타입으로 형변환 시켜주는 메소드=> 10이 int여서 사칙연산을 진행했을 때 값이 int로 바뀌기 때문에, 형변환해준다.
short s = (short) (Short.parseShort(inputStr) + 10);
String inputStr = sc.nextLine();
int n = Integer.parseInt(inputStr);
parseInt 쓴 이유 : 버퍼 공백으로 남아있는 데이터 제거 \
문제 발생 이유 : 키보드를 통해 입력을 받으면 내용이 버퍼라는 기억공간에 저장이 됨.
sc.nextInt(); 는 정수(int)를 읽어들이는 것인데
종결자가 공백 또는 엔터이다. 종결자(공백 또는 엔터) 앞까지의 입력해준 정수를 읽어온다.
sc.nextInt(); 를 사용하면 스캐너(sc)버퍼에는 종결자(공백 또는 엔터)가 삭제되는 것이 아니라 그대로 남아 있게 된다.
nextInt() 메서드 실행시 100<엔터>를 사용한다면,
120을 출력 뒤 버퍼에 <엔터>가 남게 된다.
-> nextLine() 은 엔터도 읽어올 수 있고, next(), nextInt()는 엔터를 제외하고 읽어온다.
즉 내용을 받아오게 되면 이 <엔터> 까지 nextLine()이 받아오게 된다.
int num = sc.nextInt();
sc.nextLine();
String str = sc.nextLine();
이런 식으로 중간에 남은 잔여물을 정리하기 위해 nextLine()으로 비워주거나,
nextInt(); 대신 Integer.parseInt(sc.nextLine());
엔터(개행문자) 까지 가져온 뒤에 어차피 버려질 수 있게 정수형으로 반환해 버리는 방법이 있다.
1번 방법으로 코드 작성 예시)
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
String str = sc.nextLine();
System.out.println(num1); //입력하고 enter를 치는 순간 프로그램 종료 : 엔터를 친 것이 str에 들어갔기 때문임
System.out.println(str);
1번 방법으로 코드 작성 예시2)
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
sc.nextLine(); //코드 비워주기
String str = sc.nextLine();
System.out.println(num1);
System.out.println(str);