printf(); 를 이용한 출력
기본 출력 : System.out.println();
printf(): > 같은 값이라도 다른 형식으로 출력가능
ex) 소수점 둘째자리까지만 출력하거나 정수를 16이나 8진수로 출력
System.out.printf("%.2f", 10./3);
**지시자(specifier)를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력가능
printf() 지시자 중에서 자주 사용되는 것
%b 불리언(boolean) 형식으로 출력
%d 10진(decimal) 정수의 형식으로 출력
%o 8진(octal) 정수의 형식으로 출력
%x %X 16진 정수의 형식으로 출력 (hexa-decimal) //정수
%f 부동 소수점(floating-point)의 형식으로 출력
%e %E 지수(exponent) 표현식의 형식으로 출력//실수
%c 문자(character)로 출력
%s 문자열(string)로 출력 //문자
JavaAPI > Fformatter 에 그 외의 지시자들도 있음
10진 정수로 출력할때는 %d를 사용
System.out.printf("age:%d", age);
System.out.printf("age:%d", 14);
System.out.printf(age : 14);
출력하려는 값이 2개라면, 지시자도 2개를 사용해야하며 순서가 일치해야한다
System.out.printf("age:%d year%d", age, year);
System.out.printf("age:%d year%d", 14, 2017);
"age :14 year :2017" 출력
+printf(); 는 println();과 달리 출력 후 줄바꿈을 하지 않는다.
줄바꿈을 하려면 지시자 '%n'을 따로 넣어줘야 한다
System.out.printf(“age:%d”, age); // 출력 후 줄바꿈 x
System.out.printf(“age:%d%n”, age); // 출력 후 줄바꿈
정수를 출력할 때는 지시자 '%d'를 사용하는데, 출력될 값이 차지할 공간을 숫자로 지정할 수 있다.
여러 값을 여러 줄로 간격맞춰 출력할 때 꼭 필요한 기능이다.
0과 '-'가 어떤 역할을 하는지?
system.out.printf(“[%5d]%n”, 10); >> [ 10]
system.out.printf(“[%-5d]%n”, 10); >>[10 ]
system.out.printf(“{%05d}%n”, 10); >> [00010]
지시자 %x와 %o에 '#'를 사용하면 접두사 '0x'와 '0'이 각각 붙는다.
그리고 %x는 16진수에 사용되는 접두사와 영문자를 대문자로 출력한다
Scanner : 화면에서 입력받기
자바에서 화면으로부터 입력받는 방법은 여러가지가 있으며, 점점 편리한 방향으로 발전해왔는데
최신 방법은 JDK1.6부터 추가된 Console클래스를 이용하는 것이지만, 이클립스와 같은 IDE에서는 잘 동작하지 않는다.
그렇기에 이와 유사한 Scanner 클래스를 이용해 화면으로부터 입력받는다.
사용하기 전
import java.util.Scanner;를 추가
클래스 객체 생성
Scanner scanner = new Scanner(System.in);
nextLine()이라는 메서드를 호출하면 입력 대기 상태에 있다가 입력을 마치고 엔터를 누르면 문자열로 반환된다
입력받은 메서드를 숫자로 변환하려면 Integer.parseInt();메서드를 이용해야한다. //int타입의 정수로 변환
String input = scanner.nextLine(); //입력받은 내용을 input에 저장
int num = Integer.parseInt(input); //입력받은 내용을 int 타입의 값으로 변환
Scanner 클래스에는 nextInt()나 nextFloat()와 같이 변환없이 숫자로 바로 입력받을 수 있는 메서드들이 있다.
int num : scanner.nextInt();
그러나 이 메서드들은 화면에서 연속적으로 값을 입력받아 사용하기에 까다롭기 때문에
nextLine();으로 입력받아 적절히 변환하는 것이 낫다.
정수형 (int short long byte)
정수형 타입의 연산과정에서 해당 타입이 표현할 수 있는 값의 범위는 넘어서는 것을 오버플로우(overflow)라고 한다
에러가 발생하는 것은 아니지만, 예상했던 결과를 얻지 못한다.
실수형(float, double)
실수형은 정수형과 다르게 오버플로우가 발생하면 변수의 값이 무한대(infinity)가 되며
실수형으로 표현할 수 없는 아주 작은 값인 경우 언더플로우가 발생한다. 이때의 값은 0이 된다.
***형변환(casting, 캐스팅)***
형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는것이다.
(타입)피연산자 형식이다 //(int)d;
형변환 연산자는 그저 피연산자의 값을 읽어서 지정된 타입으로 변환&반환하기 때문에 값에는 변화가 없다.
기본형에서 boolean을 제외한 나머지 타입들은 서로 형변환이 가능하다
변환 | 수식 | 결과 |
int -> char | (char)65 | 'A' |
char -> int | (int)'A' | 65 |
float -> int | (int) 1.6f | 1 |
int -> float | (float) 10 | 10.0f |
자동 형변환
형변환을 생략하면 컴파일러가 자동적으로 형변환을 한다
'기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다'
형변환이 가능한 방향은
byte - short (=char) - int - long - float - double 순서이다 //boolean은 형변환x
정리하자면
1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다
2. 기본형과 참조형은 서로 형변환 할 수 없다.
3. 서로 다른 타입의 변수간의 연산은 형변환을 하는것이 원칙이나,
값의 범위가 작은 타입>큰 타입은 생략 가능하다