Back/Java

Java의 정석 [CHAPTER2. -12~17 printf, 화면으로부터 입력받기, 오버플로우(정수, 부호), 타입 간 변환방법]

자바꿈나무00 2022. 12. 27. 13:43

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"