컴퓨터 & 코딩/Java

[혼공학습단 10기][혼공자] 변수와 시스템 입출력

구로그 2023. 6. 29. 14:52
728x90

✓ 출력하기 

  • println() : 출력 후 행 바꿈 
  • print() : 단순 출력
  • printf("형식문자열", 값1, 값2, ...): 괄호 안의 첫 번째 문자열 형식대로 내용을 출력 
✏️ 형식문자열
⇨ 구조: %[argument_index$] [flags] [width] [.precision] conversion
⇨ 각 자리의 기능: %[값의 순번] [생략 시 왼쪽 공백, -(오른쪽 공백), 0(공백을 0으로 채움)] [전체자릿수] [소수자릿수] 변환문자
⇨ 변환 문자: d(정수), f(실수), s(문자열)

 

예시> 

int value = 123;
System.out.printf("상품의 가격:%d원\n", value); // 상품의 가격:123원
System.out.printf("상품의 가격:%6d원\n", value); // 상품의 가격:      123원
System.out.printf("상품의 가격:%-6d원\n", value); // 상품의 가격:123      원
System.out.printf("상품의 가격:%06d원\n", value); // 상품의 가격:000123원

double area = 3.14159 * 10 * 10;
System.out.printf("반지름이 %d인 원의 넓이:%10.2f\n", 10, area); 
// 반지름이 10인 원의 넓이:          314,16

String name = "홍길동";
String job = "도적";
System.out.printf("%6d | %-10s | %10s\n", 1, name, job);
//      1 | 홍길동          |          도적

 

✓ 입력받기 

자바에서는 다음과 같이 키코드를 입력받을 수 있다.  

public class KeyCodeExample {
	public static void main(String[] args) throws Exception {
		int keyCode;
		
		keyCode = System.in.read(); // a 입력시
		System.out.println("keyCode: " + keyCode); // keyCode: 97

	}
}

이때 System.in.read() 는 키코드를 하나씩 읽기 때문에 한글은 읽을 수 없고 입력된 내용을 통 문자열로 읽지 못한다. 

 

이를 보완하는 것이 Scanner 클래스이다. 

import java.util.Scanner;

public class ScannerExample {
	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		String inputData;
		
		while(true) {
			inputData = scanner.nextLine(); // nextLine() 은 엔터키 이전까지 입력된 문자열을 읽는다
			System.out.println("입력된 문자열: \"" + inputData + "\"");
			if(inputData.equals("q")) {
				break;
			}
		}
		
		System.out.println("종료");
	}

}

 

❗️ 자바에서는 기본 타입 (primitive data type / byte, short, int, long, float, double, boolean) 의 값이 동일한지 비교할 때에는 "==" 을 사용하고 문자열이 동일한지 비교할 때는 equals() 메소드를 사용한다 (객체이기 때문) 

 

❗️ 위 예제들에서 scanner에 Resource leak: 'scanner' is never closed라고 뜨는데 이건 객체가 닫히지 않은 채로 프로그램이 종료되었음을 나타낸다. 이는 보통 메모리 누수로 이어질 수 있다. try-finally 블록을 사용하여 scanner.close()를 호출하도록 하면 이 오류를 해결할 수 있다. 혹은 try(Scanner scanner = new Scanner(System.in))을 해준 뒤 try 블록안에 나머지 내용을 넣음으로서 오류를 해결할 수 있다. 

 

 

 

 

반응형