반응형 예제 1 ; 입력값을 1로 입력해보세요. int a = System.in.read(); System.out.println(a); 49 System.in.read() 메소드를 통해 값을 입력받고 정수형 변수인 int a에 담아보았습니다.저는 입력값을 1을 입력했는데, 어째서 49가 출력되는 걸까요? 해당 read() 메소드는 값을 받을 때 문자형으로 받습니다.그렇기 때문에 정수형 변수 int a에 값을 전달할 때 "1"이라는 문자를 ASCII 코드로 변환한 것이죠.아스키코드의 "1"은 숫자 49를 표현해주기에 위 예제처럼 결괏값이 49가 나오게 된 것입니다. 해결 방법 ; 입력값을 1로 입력해보세요. int a = System.in.read() - '0'; System.out.println(a); 1 애초에 입력 값을 받으면서 문자 "0"을 빼주었습니다.아스키코드에서 "1"은 숫자 49, "0"은 숫자 48을 표현하고 있기에 49-48=1이 된 것이지요.이렇게 문자 "0"을 빼주는 방법도 있지만, 숫자 48을 빼주는 것도 가능하답니다. 예제 2 int a = System.in.read() - '0'; int b = System.in.read() - '0'; System.out.println(a); System.out.println(b); 1-35 이번엔 두 개의 입력값을 받아보았습니다.그런데, 첫 번째 입력값은 정상적으로 출력이 되지만 두 번째 입력값이 이상하게 나오고 있네요. read() 메소드는 값을 저장할 때 byte를 사용합니다.저희가 입력값을 입력했을 때 이미 byte는 다 채워진 상태인데요.값을 전달하기 위해 누른 엔터가 인식되어 두 번째 read에 들어가 버린 것입니다. 해결 방법 int a = System.in.read() - '0'; System.in.skip(2); int b = System.in.read() - '0'; System.out.println(a); System.out.println(b); 12 엔터가 인식되지 않도록 System.in.skip()을 이용했습니다.엔터가 인식되는 게 문제라면, 인식이 되지 않게 하면 되는 것이지요.엔터는 2byte이기 때문에 skip()에 2를 넣어주었습니다. 예제 3 ; 입력값을 apple로 해보세요. int a = System.in.read(); System.out.println(a); 97 하나의 입력 값을 받는데 다섯 자릿수인 apple를 입력해보았습니다.출력 결괏값은 a를 뜻하는 아스키코드 97이 나왔네요. 예제 2번에서 설명드렸듯이 byte 단위로 저장하기 때문에 한 글자인 a만 인식이 된 것입니다. 해결 방법 byte[] input = new byte[256]; System.in.read(input); System.out.println(new String(input)); apple 많은 글자 수를 입력받기 위하여 byte 배열을 사용해주었습니다.read() 메소드에 값을 입력할 때 input에 저장하도록 작성 후 출력 부분에서 new String()을 이용해 문자열로 변경해주었습니다. 반응형 공유하기 게시글 관리 N_Nv 저작자표시 비영리 변경금지