더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!
입력 받은 문자열을 아스키코드로 변환하는 간단한 문제입니다. 그럼 아스키 코드란 무엇일까요?
컴퓨터는 문자를 문자로 저장하지 않고 숫자로 저장합니다. 이 규칙이 바로 아스키 코드이며 아스키 코드는 0에서 127까지의 숫자를 이용하여 문자를 표현합니다.
아래의 그림은 아스키 코드 테이블입니다. 이를 참고하여 문제를 풀어보겠습니다.
먼저 sc.next()를 통해 문자열(String)을 입력받고 charAt(0)을 통해 문자열을 문자로 잘라 저장하였습니다.
다음으로는 char를 int 타입 변수에 저장하여 문자에 대응하는 값, 아스키 코드값을 저장하였습니다.
//int ASCII = sc.next().charAt(0);
char ch = sc.next().charAt(0);
int ASCII = (int)ch;
Scanner 클래스의 next(), nextLine(), nextInt() 메소드를 비교해보겠습니다.
sc.next()
: 공백(space) 이전까지 입력 받은 문자열을 리턴
sc.nextInt()
: Enter 전까지만 숫자로 입력 받아 리턴
sc.nextLine()
: Enter 전까지만 쓴 문자열을 리턴
그래서 주로 한 단어만 입력받고 싶다면 sc.next()
를, 공백이 있는 문자열 한줄을 입력받고 싶다면 sc.nextLine()
메소드를 사용합니다.
다음으로는 각각의 차이를 살펴보며 메서드를 이해해 보겠습니다. 우리가 키보드를 통해 입력을 하면 입력 받은 내용은 버퍼에 저장됩니다. 예를 들어 키보드로 123을 입력하고 Enter을 누르면 버퍼에는 아래의 사진과 같이 123\n이라고 저장될 것 입니다.
입력은 next(), nextInt(), nextLine() 메소드가 실행된 후 버퍼에 내용이 있는지 확인할 때 시작됩니다. 이때 sc.next()
,sc.nextInt()
와 sc.nextLine()
에 차이가 있습니다.
sc.next()
와 sc.nextInt()
는 버퍼에서 공백, 탭문자, 개행문자(Enter)를 제외하고 읽어오고 sc.nextLine()
는 공백, 탭문자, 개행문자(Enter)를 다 읽어 온 후 개행문자를 제거하여 이전 문자열만 반환합니다.
이러한 차이 때문에 sc.nextInt()
사용 후 sc.nextLine()
을 사용하면 입력 받기 전에 프로그램이 종료되는 문제가 발생합니다.
sc.nextInt()
로 123을 입력하고 Enter을 눌렀다면 버퍼에는 123\n이 존재할 것이고 sc.nextInt()
에서 버퍼의 내용을 가져올 때 123만 가져가 버퍼에는 \n 이 남게됩니다. 이 상황에서 nextLine을 실행한다면 버퍼에 있는 \n만 가져오고 프로그램이 종료되는 것입니다.
따라서 위와 같은 상황을 방지하기 위해 중간에 sc.nextLine()을 통해 버퍼를 정리하거나
int num = sc.nextInt();
sc.nextLine(); //개행문자 Enter를 제거하기 위해 추가
Stirng str = sc.nextLine();
아래와 같이 nextLine을 실행해 개행문자까지 가져온 뒤 정수형으로 반환하는 방법이 있습니다. [백준/JAVA] 1차원 배열 - 8958번 OX퀴즈 참고
int num = Integer.parseInt(sc.nextInt());
Stirng str = sc.nextLine();
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//int ASCII = sc.next().charAt(0);
char ch = sc.next().charAt(0);
int ASCII = (int)ch;
System.out.print(ASCII);
}
}