System.in.read()
Scanner, BufferedReader를 사용하지 않고 입력값을 받을 수 있다.
버퍼(InputStream)를 사용하기 때문에 효율적이며 IOException의 throw를 필수적으로 해주어야 한다.
문자를 하나씩만 가져올 수 있고 아스키 코드로 변환해 가져온다
예시를 통한 이해
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
for(int i=0; i<10; i++){ //반복문 시행횟수: 10번
int num = System.in.read();
System.out.print(num+" / ");
}
}}
위 구문에서 사용자가 1234를 입력하면 어떤 결과값이 나올까?
1에 해당하는 아스키 코드 49부터 주르륵 뜬다
마지막에 10(LF)이 뜬 이유는 입력하기 위해 Enter를 입력했기 때문이다.
예제 분석
위의 예시를 통해 단계별로 나누어서 이해해본다
1) 사용자가 1234를 입력한다
2) 버퍼에는 49 → 50 → 51 → 52 순으로 저장된다
3) int num = System.in.read(); 을 통해 위 순서대로 값을 가져온다
System.in.read() 사용
int를 통해 숫자나 단일 문자 char로 값을 하나씩 가져온다
숫자로 가져올 때는 아스키 코드 번호에서 48을 빼주고
char로 가져올 때는 아스키 코드를 (char)로 재변환 해준다
숫자로 가져오기
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
for(int i=0; i<10; i++){
int num = System.in.read()-48; //48을 빼주면 입력한 숫자를 가져올 수 있다
System.out.print(num+" / ");
//출력값: ' 1 / 2 / 3 / 4 / -38 / '
}
}}
문자로 가져오기
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
for(int i=0; i<10; i++){
char c = (char) System.in.read(); // (char)로 형변환만 해준다
System.out.print(c+" / ");
}
/*출력값: ' 1 / 2 / 3 / 4 /
/ ' 엔터를 쳤기 때문에 엔터가 기록된다*/
}}
'Study > Java' 카테고리의 다른 글
Java: ArrayList 2차원 배열 생성 (0) | 2021.11.09 |
---|---|
Java: String 문자열 비교에서 ==, != 아닌 equals() 메소드사용, Wrapper 클래스 값 비교(리터럴, new 연산자 생성) (0) | 2021.11.08 |
Java: 1차원, 2차원 배열 오름차순, 내림차순 정렬 요약과 이해 (0) | 2021.11.01 |
Java: 배열의 초기값 ( String 배열의 초기값만 왜 null? ) (0) | 2021.10.25 |
Java: if문을 더 짧게, 삼항 연산자 (0) | 2021.10.20 |