본문 바로가기
👨‍💻 2. 웹개발_Back end/2-1 Java

[JAVA] 02-4 변수와 시스템 입출력

by 달님🌙 2021. 7. 23.
반응형
문장 구조 의미

 

// 출력문
System.out.println("출력 내용");

// 입력문
System.in.read();

- System.out 은 시스템의 표준 출력 장치, in은 표준 입력 장치

 

출처 Crocus

 

print() / println()

- print() : 괄호안의 내용 출력

- println() : 괄호 안의 내용 출력 + line(ln약어) 이동

 

printf() 문법

- printf("형식문자열", 값1, 값2, ...)

 

출처 : printf() 와 지시자 (velog.io)

 

- 형식문자열에서의 문법

% [값이 나오는 순서] [빈자리에 나올 문자 지정] [전체 자릿수] [소수자릿수] [변환 문자]

예시) % 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

댓글