자바

자바 - Printf() 출력, Scanner 활용

망재이 2022. 12. 28. 12:50

>>> Printf를 이용한 출력

 

  1. 형식화된 출력 : 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);

        ——> 한 문장으로 표현할 수도 있고, 두 문장으로 표현할 수도 있음

 

>>> 타입 간의 변환 방법 (중요!)

 

  1. 문자와 숫자간의 변환

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 나옴
728x90