자바 - Printf() 출력, Scanner 활용
>>> Printf를 이용한 출력
- 형식화된 출력 : Printf()
- Println()의 단점 : 출력형식 지정불가
1) 실수의 자리수 조절불가 - 소수점 n자리만 출력하려면? -> Println에는 그런 기능이 아직 없음.
System.out.println(10.0/3); // 3.33333333…
System.out.pirntln(10/3); // 정수/정수이기 때문에 값도 정수 3으로만 나옴. 실수를 보고 싶으
면 실수를 나눠줘야함
2) 10진수로만 출력된다 - 8진수, 16진수로 출력하려면?
System.out.println(0x1A); // 26 (16진수 값을 입력했는데 10진수로만 나옴)
——> printf()로 출력형식 지정가능
System.out.printf(“%.2f[실수를 소수점 둘째자리까지 표시]”, 10.0/3); // 3.33
System.out.prinf(“%d[10진수]”, 0x1A); // 26
System.out.prinf(“%x[16진수]”, 0x1A); // 1A
2. printf()의 지시자
System.out.printf("age:%d year:%d\n or %n“, 14, 2022); -> printf는 줄바꿈을 하지 않아서 개행문자 \n or %n을 같이 입력해줘야 함.
1) 정수를 10진수, 8진수, 16진수, 2진수로 출력
System.out.printf(“%d”, 15); // 15 (10진수)
System.out.printf(“%o”, 15); // 17 (8진수 -> 1=8)
System.out.printf(“%x”, 15); // f (16진수 -> 15=f)
System.out.printf(“%s”, Integer.toBinaryString(15)); // 1111 (2진수 -> 따로 지시자는 없음)
2) 8진수, 16진수 앞에 접두사 붙이기
System.out.printf(“%#o”, 15); // 017
System.out.printf(“%#x”, 15); // 0xf
System.out.printf(“%#X”, 15); // 0Xf
3) 실수 출력을 위한 지시자 %f - 지수형식(%e), 간략한 형식(%g) - %f와 %e 중 더 적합한 지시자 사용
float f = 123.4567890f;
System.out.printf(“%f”, f); // 123.456787[의미x] (소수점 아래 6자리/정밀도:7자리)
System.out.printf(“%e”, f); // 1.234568e+02 (10의 2제곱)
(cf. double은 정밀도가 15자리라서 double d = 123.4567890;에 지시자 %f를 입력하면
123.456789가 출력됨)
System.out.printf(“%g”, 123.456789); // 123.457 (간략한 형식, 소수점 포함 7자리)
System.out.printf(“%g”, 0.00000001); // 1.00000e-8
——> 각 지시자가 몇자리까지 나오는지는 크게 중요하지 않고, 실수를 출력할때는 기본적으로 지시자
%f, 0이 많을 때는 지시자 %e를 사용
4) 전체 자리, 소수점 아래 자리 설정하기
System.out.printf(“[%5d]%n”, 10); // [ 10] (총 5자리를 출력, 남은 자리는 공백으로 처리)
System.out.printf(“[%-5d]%n”, 10); // [10 ] (왼쪽 정렬)
System.out.printf(“[%05d]%n”, 10); // [00010] (공백에 0을 채움)
——> System.out.printf(“d=%14.10f%n”, d); %소수점 포함 전체자리.소수점아래자리f //
전체 14자리 중 소수점 아래 10자리 정수 앞은 공백, 소수점 뒷자리는 0으로 채움
double d = 1.23456789;
System.out.printf("[d=%14.10f]%n", d);
-> [d= 1.2345678900]
%s로도 %d랑 똑같음 출력값을 낼 수 있음
System.out.printf(“[%s]%n”, url); // [www.mangs2e.com]
System.out.printf(“[%20s]%n”, url); // [ www.mangs2e.com] (공백 채움)
System.out.printf(“[%-20s]%n”, url); // [www.mangs2e.com ] (왼쪽 정렬)
System.out.printf(“[%.8s]%n”, url); // [www.mang] (부분 출력)
>>> 화면에서 입력받기 - Scanner
1) import문 추가 : import java.util.*; or import java.scanner; 라고 써도 무관
2) Scanner 객체 추가 : Scanner scanner = new Scanner (System.in); (화면 입력을 받겠다는 뜻)
3) Scanner 객체를 이용 :
- int num = scanner.nextInt(); // 화면에서 입력받는 정수를 num에 저장
(cf. 실수를 저장하려면 float num = scanner.nextFloat(); long도 마찬가지)
import java.util.*; // 1. import문 추가
public class ScannerEx1 {
public static void main(String[] args) {
// 2. scanner클래스 객체 생성
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println(num);
System.out.println(num2);
}
}
- String input = scanner.nextLine(); // 화면에서 입력받는 내용을 input에 저장; 한 행을 읽어서 문자열로 변환
int num = Integer.parseInt(input); // 문자열(input)을 숫자(num)으로 변환; 문자 실수 정수 등 여러가지가 섞여있을 때 보통 사용
String input = scanner.nextLine();
int num = Integer.parseInt(input);
System.out.println(num);
——> 한 문장으로 표현할 수도 있고, 두 문장으로 표현할 수도 있음
>>> 타입 간의 변환 방법 (중요!)
- 문자와 숫자간의 변환
3 (숫자) — +’0’ —> ‘3’ (문자)
3 (숫자) <— -‘0’ — ‘3’ (문자)
2. 문자열로의 변환
3 (숫자) — +””(빈문자열) —> “3” (문자열)
‘3’ (문자) — +””(빈문자열) —> “3” (문자열)
3. 문자열을 숫자로 변환
“3” (문자열) — Integer.parseInt(“3”) —> 3 (숫자)
“3.14”(문자열) — Double.parseDouble(“3.14”) —> 3.14 (숫자)
4. 문자열을 문자로 변환
“3” (문자열) — .charAt(0) —> ‘3’ (문자)
/// 문자열을 문자로 변환
String str = "3";
System.out.println("3".charAt(0)); // 바로 값을 ""안에 입력해도 되고
System.out.println(str.charAt(0)); // 변수를 지정해줘도 됨
Ex)
System.out.println("3".charAt(0)); // 문자 '3'로 변환
System.out.println("3".charAt(0)-'0'); // 숫자 3로 변환
System.out.println("3".charAt(0)-'0'+1); // 값 4 나옴