Java의 정석 [CHAPTER2. -12~17 printf, 화면으로부터 입력받기, 오버플로우(정수, 부호), 타입 간 변환방법]
CHAPTER2. -12, 13 printf()를 이용한 출력
- println은 값을 변환하지 않고는 다른 형식으로 출력할 수 없다.
- 같은 값이라도 다른 형식으로 출력하고 싶을 때 사용한다.
- 여러 가지 형식으로 변환하여 출력하는 기능을 가진 지시자(specifier)를 통해 출력한다.
자주 사용되는 지시자
지시자(specifier) | 설명 |
%d | 10진(decimal) 정수의 형식으로 출력 |
%x | 16진(hexa-dacimal) 정수의 형식으로 출력 |
%f | 부동 소수점(floating-point)의 형식으로 출력 |
%c | 문자(character)로 출력 |
%s | 문자열(string)로 출력 |
%n | 줄바꿈 기능(\n을 사용해도 되지만 OS마다 줄바꿈 문자가 다를 수 있어 %n을 쓰는 게 더 안전하다.) |
참고
- 실수형 값의 출력%e : 지수형태로 출력
- 실수형 값의 출력%g : 간략히 출력
- %전체자리.소수점아래자리f => System.out.printf("d=%14.10f%n", d); //전체 14자리 중 소수점 아래 10자리
(자바의 정석 p.59)
- 지정된 숫자보다 문자열의 길이가 작으면 빈자리는 공백을 출력
- 공백이 있는 경우 우측 끝에 문자열 정렬, '-'를 붙이면 좌측 끝에 정렬
- '.'을 붙이면 문자열의 일부만 출력
예) System.out.printf("[%s]%n", url); // 문자열의 길이만큼 문자열 확보
System.out.printf("[%20s]%n", url); // 최소 20글자 출력공간 확보(우측정렬)
System.out.printf("[%-20s]%n", url); // 최소 20글자 출력공간 확보(좌측정렬)
System.out.printf("[%.8s]%n", url); // 왼쪽에서 8글자만 출력
CHAPTER2. -14 화면으로부터 입력받기
import java.util.Scanner; // Scannaer클래스를 사용하기 위해 추가
Scanner scanner = new Scanner(System.in); // Scanner 클래스의 객체 생성
String input = scanner.nextLine(); // 입력받은 내용을 input에 저장
int num = integer.parseInt(input); // 입력받은 내용을 int 타입의 값으로 변환
* 변환 없이 바로 사용하려면 scanner.nextLine이 아니라 데이터 타입에
맞게 선택해서 사용하면 된다. (nextInt, nextFloat, ...)
CHAPTER2. -15 정수형의 오버플로우(p.62~63)
부호없는 정수의 오버플로우 : 해당 타입이 표현할 수 있는 범위를 초과해서 발생한다. 2진수로 '0000'이 될 때 발생한다.
예) 1111 + 1 => 계산하면 10000인데 하위 4 bit만 저장되서 0000
- 오버플로우가 발생해도 에러가 발생되는 건 아니어서 모를 수 있고, 예상했던 결과를 얻기 힘들다.
- 부호없는 정수(4bit)의 경우 최대값이 15인 경우 표현범위가 '0~15'이므로 이 값이 계속 반복된다.
=> 처음부터 발생하지 않도록 고려해서 크기의 타입을 설정하기
CHAPTER2. -16 부호 있는 정수의 오버플로우(p.64~65)
부호 있는 정수의 오버플로우 : 부호비트가 0에서 1이 될 때 발생한다.
- 부호있는 정수(4bit)의 경우 표현범위가 '-8~7'이므로 이 값이 무한히 반복된다.
- 최소값 -1 => 최대값
- 최대값 +1 => 최소값
CHAPTER2. -17 타입 간의 변환 방법(자주 사용)
구분 | 변환 방법 | 예시 |
1. 숫자 -> 문자 | 숫자에 '0'을 더한다. | (char)(3 + '0') => '3' |
2. 문자 -> 숫자 | 문자에서 '0'을 뺀다. | '3' - '0' => 3 |
3. 숫자 -> 문자열 | 숫자에 빈 문자열(" ")을 더한다. | 3 + " " => 3 |
4. 문자열 -> 숫자 | Integer.parseInt() 또는 Double.parseDouble()을 사용한다. |
Integer.parseInt("3") => '3' Double.parseDouble("3.14") => 3.14 |
5. 문자열 -> 문자 | .charAt(0)을 사용한다. | "3".charAt(0) => '3' |
6. 문자 -> 문자열 | 빈 문자열" "을 더한다. | '3' + " " => "3" |