문장 구조 의미
// 출력문
System.out.println("출력 내용");
// 입력문
System.in.read();
- System.out 은 시스템의 표준 출력 장치, in은 표준 입력 장치
print() / println()
- print() : 괄호안의 내용 출력
- println() : 괄호 안의 내용 출력 + line(ln약어) 이동
printf() 문법
- printf("형식문자열", 값1, 값2, ...)
- 형식문자열에서의 문법
% [값이 나오는 순서] [빈자리에 나올 문자 지정] [전체 자릿수] [소수자릿수] [변환 문자]
예시) % 2$ d : 두 번째 값을 뜻하고 10진수(decimal) 값을 의미한다
printf() 메소드 사용 예제
System.out.printf("이름:%s\n", "김자바");
// System.out.printf("이름:%s", "김자바\n"); 위 코드랑 같음, but 보통은 위처럼 사용
System.out.printf("나이:%d\n", 27); // %d 의미 : decimal(10진수)
System.out.printf("신장:%f\n", 186.5);
System.out.printf("신장:%e\n\n", 186.5); // 지수로 표현
이름:김자바
나이:27
신장:186.500000
신장:1.865000e+02
printf() 문법이 꼭 필요한 이유
-> 코드가 길어질수록 printf문이 더 보기 편하다
System.out.println("[이름:" + "김자바" + "], " + "[나이:" + 27 + "]"); // 알아보기 힘듬
System.out.printf("[이름:%s], [나이:%d]", "김자바",27); // 더 깔끔함
[이름:김자바], [나이:27]
[이름:김자바], [나이:27]
- 위 두 줄은 같은 출력값을 같지만 첫째 코드는 보기가 불편하다.
- 하물며 코드가 더 복잡해진다면 더욱 알아보기 힘들것이다. 그래서 나온게 printf문이다.
printf() 메소드 사용 예제 2
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.read() 를 이용하여 입력된 내용을 저장한다.
** 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 ) 로 구성된다.
캐리지 리턴과 라인 피드 알아보기
- CR : 커서를 맨 왼쪽으로 이동 (시작 위치로)
- LF : 커서를 한 칸 아래로 이동(행 추가)
개행문자, 라인피드, 캐리지리턴 - 제타위키 (zetawiki.com)
개행문자, 라인피드, 캐리지리턴 - 제타위키
다음 문자열 포함...
zetawiki.com
예외 처리
import java.io.IOException;
public class ContinueKeyCodeReadExample {
public static void main(String[] args) throws IOException {
//예외를 안에서 처리하는게 아니라 그냥 던져버린다
int keyCode;
while(true) {
keyCode = System.in.read();
if(keyCode == 113) {
break;
}
System.out.println(keyCode);
}
System.out.println("종료");
}
}
> 에러 내용 : unhandled exception type IOEwception
> 예외 처리하는 방법
> 에러가 발생한 줄에 커서를 대면 Add throws declaration이 보인다. > 클릭한다. > 해결
Break 문
- break 를 만나면 while문을 빠져나오게 된다.
- 반복문을 빠져나오기 위해서는 break 필수
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();
}
}
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"입니다.
종료
nextInt() vs nextLine() 정리
[Java] 자바 표준 입출력 (nextInt, nextLine 등) 주의사항 (tistory.com)
[Java] 자바 표준 입출력 (nextInt, nextLine 등) 주의사항
1. 입출력 함수 사용시 주의사항 1 - 타입 별로 입력을 받는 방법 1) int를 입력 받을 때는 nextInt 메서드를 이용한다. public class StandardIO { public static void main(String[] args) throws IOException {..
limkydev.tistory.com
'👨💻 2. 웹개발_Back end > 2-1 Java' 카테고리의 다른 글
[JAVA] 03-2 연산자의 종류 (0) | 2021.07.26 |
---|---|
[JAVA] 03-1 연산자와 연산식 (0) | 2021.07.23 |
[JAVA] 02-3 타입변환 (0) | 2021.07.21 |
[JAVA] 02-2 기본 타입 (0) | 2021.07.21 |
[JAVA] 02-1 변수 (0) | 2021.07.20 |
댓글