문장 구조 의미
// 출력문
System.out.println("출력 내용");
// 입력문
System.in.read();
- System.out 은 시스템의 표준 출력 장치 → 모니터
- System.in은 표준 입력 장치 → 키보드
System.out
- 시스템의 표준 출력 장치(모니터)로 출력
- System.out.println("출력 내용");
println() 메소드 / print() 메소드 / pringf 메소드
- System.out.println(): 괄호안에 주어진 매개값을 모니터로 출력하고 행을 이동
- System.out.printl(): 괄호안에 주어진 매개값을 모니터로 출력( 행을 이동 x)
- System.out.printf(): 괄호안에 주어진 형식대로 출력
- 개발자가 원하는 형식화된 물자열 (formal string) 출력
- 전체자리수 및 소수자리수 제한
-%와 conversion 외에는 모두 생략 가능
-conversion 에는 제공되는 값의 타입에 따라 d(정수) , f (실수) , s(문자열)입력
System.out.printf("이름:%s\n", "김자바");
System.out.printf("나이:%d\n", 27); // %d 의미 : decimal(10진수)즉 정수
System.out.printf("신장:%f\n", 186.5);
이름:김자바
나이:27
신장:186.500000
- flags : 빈자리를 채우는 방법
- 생략 시 왼쪽이 공백으로 채워짐, -가 오면 오른쪽이 공백으로 채워짐. 0은 공백 대신 0으로 채워짐.
* 자주 사용되는 형식 문자열
printf() 문법이 필요한 이유
- 코드가 길어질수록 printf문이 더 보기 편하다
System.out.println("[이름:" + "김자바" + "], " + "[나이:" + 27 + "]"); // 알아보기 힘듦
System.out.printf("[이름:%s], [나이:%d]", "김자바",27); // 더 깔끔함
[이름:김자바], [나이:27]
[이름:김자바], [나이:27]
printf() 메소드 사용 예제
int value = 123;
System.out.printf("상품의 가격: %d원\n", value);
System.out.printf("상품의 가격: %6d원\n", value);
System.out.printf("상품의 가격: %-6d원\n", value);
System.out.printf("상품의 가격: %06d원\n\n", value);
double area = 3.141592 * 10 * 10;
System.out.printf("반지름이 %d인 원의 넓이: %f\n", 10 , area);
System.out.printf("반지름이 %d인 원의 넓이: %010.2f\n", 10 , area);
System.out.printf("반지름이 %d인 원의 넓이: %03.2f\n", 10 , area);
상품의 가격: 123원
상품의 가격: 123원
상품의 가격: 123 원
상품의 가격: 000123원
반지름이 10인 원의 넓이: 314.159200
반지름이 10인 원의 넓이: 0000314.16
반지름이 10인 원의 넓이: 314.16
키보드에서 입력된 내용을 변수에 저장하기
System.in
- 시스템의 표준 입력장치(키보드)에서 읽음
- System.in.read();
- 하나의 키에 대해서만 읽고 여러키가 조합된 한글이나 전체 문자열은 읽을 수 없음
키코드
- 키보드에서 키를 입력할 때 프로그램에서 숫자로 된 키코드를 읽음
- System.in.read() 를 이용하여 입력된 내용을 저장
- 얻은 키코드는 대입 연산자 사용하여 int 변수에 저장
** 주요 Key Code Table
** Key Code 활용한 예제
public static void main(String[] args) throws IOException {
// 예외 처리 발생 -> Ch_10 에서 배울 예정
int keyCode;
keyCode = System.in.read();
System.out.println("KeyCode: "+ keyCode);
keyCode = System.in.read();
System.out.println("KeyCode: "+ keyCode);
keyCode = System.in.read();
System.out.println("KeyCode: "+ keyCode);
}
a
KeyCode: 97
KeyCode: 13
KeyCode: 10
- a의 키코드는 97
- 우리가 누른 Enter 키에 대한 키코드는 2개의 키코드를 받음
- 캐리지 리턴 ( CR : 13 ) 과 라인 피드 ( LF : 10 ) 로 구성된다.
Q Stop 예제
** 예제 1
boolean working = true;
int keyCode;
while(true) {
try {
keyCode = System.in.read();
System.out.printf("keCode: %d\n",System.in.read());
//if(keyCode == 113) //113 보다는 아래 q가 낫다
if(keyCode == 'q' || keyCode == 'Q') {
working = false;
}
}
catch (IOException e) {
e.printStackTrace();
}
}
** 예제 2
while(true) {
try {
System.out.printf("keCode: %d\n",System.in.read());
// break; int형 숫자
} catch (IOException e) {
e.printStackTrace();
}
}
system.in.read()의 단점
- 2개이상 키가 조합된 한글을 읽을수 없음
- 키보드로 입력된 내용을 통문자열로 읽을 수 없음
Scanner 로 해결
- System.in.read()는 키코드를 하나씩 읽기 대문에 2개 이상의 키가 조합된 한글을 읽을 수 없으며 키보드로부터 입력된 내용을 통 문자열로 읽지 못하기 때문에 이러한 단점을 보완한 Scanner클래스 사용
- 키보드로부터 입력된 내용을 통 문자열로 쉽게 읽을 수 있음
- 한글 문자열 뿐만 아니라 엔터를 입력하기 전 전체 문자열을 매우 쉽게 읽을 수 있음
** 우선 다음 예제를 통해 Scanner 의 필요성에 대해 알아보자.
예제 - 여러 문자의 key code 출력하기
public static void main(String[] args) throws IOException {
// int keyCode;
// keyCode = System.in.read(); 에러발생
// 한번만 사용할 경우 변수를 굳이 선언해주지않고 print문 안에서 해도됨
try {
System.out.printf("keCode: %d\n",System.in.read());
System.out.printf("keCode: %d\n",System.in.read());
System.out.printf("keCode: %d\n",System.in.read());
System.out.printf("keCode: %d\n",System.in.read());
System.out.printf("keCode: %d\n",System.in.read());
// int형 숫자
} catch (IOException e) {
e.printStackTrace();
}
}
abcde
keCode: 97
keCode: 98
keCode: 99
keCode: 100
keCode: 101
- 문자를 6개 이상 입력해도 5개의 key code만 알려준다. -> 결론 : printf 문장수 만큼만 읽어준다
- 더 더 많이 입력받고싶다면??
- 해결법 1 : while문 이용하기 -> but 이 방법도 불편함
- 해결법 2 : Scanner 이용하기
Scanner 를 사용한 예제
예제 1 - 문자열 입력 받기
Scanner scan = new Scanner(System.in);
scan.hasNextLine();
String inputData;
while(true) {
inputData = scan.nextLine();
System.out.println("입력된 문자열:" + inputData);
if(inputData.equals("q")) {
break;
}
} System.out.println("종료");
떡볶이
입력된 문자열:떡볶이
예제 2 - 메뉴 주문
// 메뉴 고르기
Scanner scn = new Scanner(System.in);
String str = "";
while(true) {
System.out.println("♥___________♥");
System.out.println(" 메 뉴 ");
System.out.println("♥___________♥");
str = scn.nextLine();
System.out.printf("입력하신 메뉴는 \"%s\"입니다.\n",str);
if(str.equalsIgnoreCase("q")) {
System.out.println("종료");
break;
}
}
♥________________♥
메 뉴
♥________________♥
1
입력하신 메뉴는 "1"입니다.
♥________________♥
메 뉴
♥________________♥
q
입력하신 메뉴는 "q"입니다.
종료
'Java' 카테고리의 다른 글
[JAVA ] 참조 타입(참조타입과 참조변수) (0) | 2022.01.30 |
---|---|
[JAVA ] 조건문 (if문, switch문,for문, while문, do-while문, break, continue, label) (0) | 2022.01.26 |
[Java] 연산자, 연산자의 종류 (0) | 2022.01.23 |
[Java] 변수 타입 변환 (0) | 2022.01.23 |
[Java] 변수 타입 (0) | 2022.01.23 |