ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 007. 자바의 입출력 print, Scanner, 실수 정밀도, 키보드 주요 특수문자 영문이름, + 연산자 실습
    SsY/Class 2023. 2. 18. 03:00
    728x90

    2023.02.02 (목)

    자바 기본 입출력
    - print()
    - println()
    - printf()
    • Test016
      - 자바 기본 입출력 : System.out.printf()
    • 기본적으로 숫자는 우측 정렬, 문자열은 좌측정렬
    더보기
    /*================================================
    	   ■■■ 자바 기본 프로그래밍 ■■■
    	- 자바 기본 입출력 : System.out.printf()
    =================================================*/
    
    public class Test016
    {
    	public static void main(String[] args)
    	{
    		System.out.print("AAA");
    		System.out.print("BBB");
    		System.out.print("CCC\n");			//--『\n』  개행
    		//--==>> AAABBBCCC
    
    		System.out.println();				//-- 개행
    
    		//System.out.print();
    		//--==>> 에러 발생(컴파일 에러)
    
    		System.out.print("\n");				//-- 개행
    		//System.out.print(\n);
    		//--==>> 에러 발생(컴파일 에러)
    
    		System.out.printf("123456789");
    		System.out.printf("123456789\n)");	//--『\n』 개행
    		System.out.printf("123456789%n");	//--『%n』 개행
    
    		//System.out.printf();
    		//--==>> 에러 발생(컴파일 에러)
    
    		System.out.printf("%d + %d = %d\n", 10, 20, 30);
    		//--==>> 10 + 20 = 30
    
    		System.out.printf("%d\n", 123);
    		System.out.printf("%10d\n", 123);			// ----------123	(10칸 확보)
    		System.out.printf("%8d\n", 1234);			// --------1234		(8칸 확보)
    		System.out.printf("%010d\n", 1234);			// 0000000000123	(빈 칸을 0으로 채움)
    		//--==>>
    		/*
    		123
    			   123
    			1234
    		0000001234
    		*/
    		
    		System.out.println(+365);
    		System.out.println(-365);
    		//--==>> 
    		/*
    		365											// 양수 + 출력 (X)
    		-365
    		*/
    
    		
    		System.out.printf("%+d\n", 365);
    		System.out.printf("+%d\n", 365);
    		//--==>>
    		/*
    		+365
    		+365
    		*/
    
    		System.out.printf("%d\n", +365);			// 양수 + 출력 (X)
    		//--==>> 365
    
    
    		//System.out.printf("%-d\n", 365);
    		//--==>> 에러 발생(런타임 에러)
    		System.out.printf("-%d\n", 365);
    		//--==>> -365
    		System.out.printf("%d\n", -365);
    		//--==>> -365
    
    		//System.out.printf("%d\n", 'A');
    		//--==>> 에러 발생(런타임 에러)
    		System.out.printf("%c\n", 'A');
    		//--==>> A
    
    		//System.out.printf("%c\n", "ABCD");
    		//--==>> 에러 발생(런타임 에러)
    		System.out.printf("%s\n", "ABCD");
    		//--==>> ABCD
    
    		System.out.printf("%d\n", 365);
    		//--==>> 365
    		System.out.printf("%h\n", 365);			//-- 16진수
    		//--==>> 16d
    		System.out.printf("%o\n", 24);			//-- 8진수
    		//--==>> 30
    
    
    		System.out.printf("%b\n", true);
    		System.out.printf("%b\n", false);
    		//--==>> true
    		//		 false
    
    		System.out.printf("%f\n", 123.23);
    		System.out.printf("%.2f\n", 123.23);
    		//--==>> 123.230000
    		//		 123.23
    		//-- 소수점 이하 두 번째 자리까지 표현
    
    
    		//check
    		System.out.printf("%.2f\n", 123.231);
    		//--==>> 123.23
    		//-- 소수점 이하 두 번째 자리까지 표현
    		//	 (소수점 이하 세 번째 자리 절삭)
    
    		System.out.printf("%.2f\n", 123.235);
    		//--==>> 123.24
    		//-- 소수점 이하 두 번째 자리까지 표현
    		//	 (소수점 이하 세 번째 자리 반올림)
    
    		//check
    		//					%10d
    		System.out.printf("%8.2f\n", 123.236);			
    		//--==>>   123.24
            // --123.24   총 8 자리 확보 후 소수점(한칸)까지 그 안에서 표현
    
    		System.out.printf("%2.2f\n", 123.236);	
    		//--==>> 123.24	
            // 123.24	 확보한 자리수 보다 표현할 숫자의 크기가 크다면 잘리지 않고 자동적으로 자리가 확보 됨
    	}
    }

     

    ※ 위 예제들을 확인하여 출력 구문의 차이를 확실히 알아두자!
    + format을 쓸 때, printf()와 치환해서 사용이 가능하지만,
       format은 String 객체 호출에 사용하는 다른 기능도 있기 때문에 최대한 printf()로 사용하여 혼란을 방지한다.


    자바 기본 입출력
    - java.util.Scanner
    // ※ java.util.Scanner
    // 단락 문자 패턴을 사용하여 입력을 토큰에 따라 분할하며
    // 디폴트(defalt)로 사용되는 단락문자는 공백이다.
    // 작성된 다음 토큰은『next()』메소드를 사용
    // 다른 형태(자료형)의 값으로 변환할 수 있다.
    • Test017
    import java.util.Scanner;
    
    public class Test017
    {
    	public static void main(String[] args) 
    	{
    		// Scanner 클래스 기반의 인스턴스 생성
    		Scanner sc = new Scanner(System.in);				// 번역기 내장~
    
    		// 주요 변수 선언
    		String name;										//-- 이름
    		int kor,eng, mat;									//-- 국어, 영어, 수학 점수
    
    
    		// 연산 및 처리
    		System.out.print("이름을 입력하세요 : ");
    		// name = br.readLine
    		name = sc.next();
    
    		System.out.print("국어 점수 입력 : ");
    		// kor = Integer.parseInt(br.readLine());
    		// kor = Integer.parseInt(sc.next());				//-- 가능은 함
    		kor = sc.nextInt();									//-- 정수를 읽어 옴
    		// kor = sc.nextDouble								//-- 실수 형태도 가능!
    		
    		System.out.print("영어 점수 입력 : ");
    		eng = sc.nextInt();
    
    		System.out.print("수학 점수 입력 : ");
    		mat = sc.nextInt();
    
    
    		// 결과 출력
    		System.out.println();
    		System.out.println(">> 이름 : " + name);
    		System.out.println(">> 총점 : " + (kor + eng + mat));
    		
    		//System.out.println(">> 총점 : " + kor + eng + mat);			// 실행시 에러는 나지 않지만 하면 안됨
    		//--==>> >> 총점 : 908070
    
    	}
    }
    
    // 실행 결과
    /*
    이름을 입력하세요 : 행성c
    국어 점수 입력 : 80
    영어 점수 입력 : 85
    수학 점수 입력 : 90
    
    >> 이름 : 행성c
    >> 총점 : 255
    계속하려면 아무 키나 누르십시오 . . .
    */

    ※ 예제를 관찰하여 Scanner의 기능을 파악

    더보기

    import java.util.Scanner;

    ==> java.util.Scanner
     
    기능이 많으면 성능이 떨어진다!
    Scanner의 경우 번역 내장, 조약사항 내장 등으로 인해 InputStreamReader나, IOException을 쓸 필요가 없다.
    단, BufferedReader에 비해, 성능은 조금 떨어진다고 함.
     
    - 토큰 : 지정한 구분자로 쪼개어진 문자열
    - next : 문자열 타입

    • Test018
      - 자바 기본 입출력 : java.util.Scanner
    더보기
    //import java.util.Scanner;
    
    public class Test018
    {
    	public static void main(String[] args)
    	{
    		// 주요 변수 선언
    		java.util.Scanner sc = new java.util.Scanner(System.in);
    		String name;
    		int kor, eng, mat, tot;
    
    		// 연산 및 처리
    		// - 사용자에게 안내 메세지 출력
    		System.out.print("이름 국어 영어 수학 입력 (공백 구분) : ");
    		//-- "행성c 100 90 80"
    		name = sc.next();
    		kor = sc.nextInt();
    		eng = sc.nextInt();
    		mat = sc.nextInt();
    
    		// - 총점 산출
    		tot = kor + eng + mat;
    
    		// 결과 출력
    		System.out.println();
    		System.out.println(">> 이름 : " + name);
    		System.out.println(">> 총점 : " + tot);
    	}
    }
    
    // 실행 결과
    
    /*
    이름 국어 영어 수학 입력 (공백 구분) : 행성c 100 90 80
    
    >> 이름 : 행성c
    >> 총점 : 270
    계속하려면 아무 키나 누르십시오 . . .
    */

    상기와 같이 import 구문을 넣지 않고 일일이 사용할 때 마다 인스턴스 주소를 입력하는 방식으로도 사용이 가능
    단, 구문을 여러번 사용할 경우에는 오류를 줄이기 위해 주소값을 import해주는 것이 좋다.


    • Test019
      - 자바 기본 입출력  : java.util.Scanner
    '\' 와 '%' 는 \n(개행), \t(탭),  %d(정수형), %n(개행)  등 뒤에오는 옵션과 함께 사용되어 기능을 수행한다.
    그렇기 때문에 문자 하나만 입력을 하게 되면 다음 문자를 확인하기 위해서 자바가 문자열을 끝내지 않는다.
    따라서, '\' '%'문자 입력을 위해서는 "\\" 또는 "%%" 로 입력이 필요하다.
    더보기
    /*================================================
    	   ■■■ 자바 기본 프로그래밍 ■■■
    	- 자바 기본 입출력 : java.util.Scanner
    =================================================*/
    
    // ※ java.util.Scanner
    //		단락 문자 패턴을 사용하여 입력을 토큰에 따라 분할하며
    //		디폴트(defalt)로 사용되는 단락문자는 공백이다.
    //		작성된 다음 토큰은『next()』메소드를 사용
    //		다른 형태(자료형)의 값으로 변환할 수 있다.
    
    import java.util.Scanner;
    
    public class Test019
    {
    	public static void main(String[] args)
    	{
    		//System.out.println("\");
    		//--==>> 에러 발생 (컴파일 에러)								// '\' 뒤에 올 옵션을 기다리기 때문에 오류 발생
    
    		//System.out.println("\\");
    		//--==>> \
    
    		// 주요 변수 선언
    		Scanner sc = new Scanner(System.in);
    		String name;
    		int kor, eng, mat, tot;
    
    
    		// 연산 및 처리
    		System.out.print("이름,국어,영어,수학 입력 (『,』구분) : ");
    		// 이름,국어,영어,수학 입력 『,』구분 : 행성,90,80,70
    
    		sc = new Scanner(sc.next()).useDelimiter("\\s*,\\s*");
    		//				 ---------
    		//				"행성,90,80,70"
    
    		//sc = new Scanner(sc.next()).useDelimiter("\\s*,\\s*");
    		//							 .구분자사용(   );
    		//										 ---
    		//										"\\s,\\s"
    		//	"\t"	"\n"	"\r"	"\\"→"\"	"\s*,\s*"				// '\' 뒤에 올 옵션을 기다리기 때문에 오류 발생
    		//										 ---
    		//										 임의의 모든 문자열
    
    		// 이름이너무길어서당황스러워요,90,80,70
    		// 행성,90,80,70
    
    		name = sc.next();
    		kor = sc.nextInt();
    		eng = sc.nextInt();
    		mat = sc.nextInt();
    		
    		tot = kor + eng + mat;
    
    
    		// 결과 출력
    		System.out.println("\n>> 이름 : " + name);
    		System.out.println(">> 총점 : " + tot);
    
    
    	}
    }
    // 실행결과
    
    /*
    이름,국어,영어,수학 입력 (『,』구분) : 행성,100,90,80
    
    >> 이름 : 행성
    >> 총점 : 270
    계속하려면 아무 키나 누르십시오 . . .
    */

    * Scanner 구분자 변경

    더보기

    sc = new Scanner(sc.next()).useDelimiter();

                                                                       ㄴ 구분자 입력   :      \\s,\\s
                                                                                                     ------  ------
                                                                                      임의의 문자열 , 임의의 문자열
                                                                                                            ~~  사이의 ','로 구분 하라는 뜻 

    변수와 자료형
    - 실수형 데이터 타입의 정밀도 테스트
    • Test020
    /*================================================
    	   ■■■ 자바 기본 프로그래밍 ■■■
       - 변수와 자료형
       - 실수형 데이터타입의 정밀도 테스트 실습
    =================================================*/
    
    public class Test020
    {
    	public static void main(String[] args)
    	{
    		// 주요 변수 선언
    		float a = 0;
    		double b = 0;
    
    		// 연산 및 처리 → 반복문 구성 → 100000(십만) 번 반복
    		for (int i=1; i<=100000; i++ )
    		{
    			//System.out.println("반복출력");						 // 십만 번 반복
    
    			a+=100000;											//-- a 를 100000 만큼 증가시켜라
    			b+=100000;											//-- b 를 100000 만큼 증가시켜라
    		}
    		
    
    
    		// 결과 출력
    		System.out.println("float  a : " + (a/100000));
    		System.out.println("double b : " + (b/100000)); 
    
    	}
    }
    
    // 실행 결과
    
    /*
    float  a : 99996.055
    double b : 100000.0
    계속하려면 아무 키나 누르십시오 . . .
    */
    
    //정밀도 차이에서 나오는 차이
    //따라서 데이터 연산시 실수는  double 로 처리하는 것이 정밀도에 좋다.

    실수형 데이터 타입의 기준이 float이 아닌 double 인 이유

     


    문제해결
    • Test021
      - 산술 연산자
      - BufferedReader
      - printf()
    더보기
    /*================================================
    	   ■■■ 자바 기본 프로그래밍 ■■■
       - 산술 연산자
       - BufferedReader
       - printf()
    =================================================*/
    
    // 사용자로부터 임의의 정수를 두 개 입력받아
    // 사칙연산 및 나머지 연산을 수행하여
    // 그 결과를 출력하는 프로그램을 구현한다.
    // 단, 입력받는 과정은 BufferedReader 를 활용 할 수 있도록 하고.
    // 출력하는 과정은 printf() 메소드를 활용 할 수 있도록 한다.
    // 또한, 나눗셈 연산은 편의상 정수 기반으로 처리한다.
    
    // 실행 예)
    // 첫 번째 정수 입력 : 10
    // 두 번째 정수 입력 : 2
    
    // ====[결과]====
    // 10 + 2 = 12
    // 10 - 2 = 8
    // 10 * 2 = 20
    // 10 / 2 = 5
    // 10 % 2 = 0
    // ==============
    // 계속하려면 아무 키나 누르세요...
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Test021
    {
    	public static void main(String[] args) throws IOException
    	{	
    		/* ============================================ 내 풀이
    		// BufferedReader 인스턴스 생성
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		
    		// 주요 변수 선언
    		int a, b;										// 첫 번째 정수, 두 번째 정수
    		//int plus, minus, multiple, devide, rest
    		
    		// 연산 및 처리
    		System.out.printf("첫 번째 정수 입력 : ");
    		a = Integer.parseInt(br.readLine());
    		
    		System.out.printf("두 번째 정수 입력 : ");
    		b = Integer.parseInt(br.readLine());
    
    		
    
    		// 결과 출력
    		System.out.printf("\n====[결과]====\n");
    		System.out.printf("%d + %d = %d\n", a, b, (a + b));
    		System.out.printf("%d - %d = %d\n", a, b, (a - b));
    		System.out.printf("%d * %d = %d\n", a, b, (a * b));
    		System.out.printf("%d / %d = %d\n", a, b, (a / b));
    		System.out.printf("%d %% %d = %d\n", a, b, (a % b));					// check %%
    		System.out.printf("==============\n");
    		*/
    
    		//============================================= 다 같이
    		
    		// 주요 변수 선언
    		int num1, num2;									//-- 사용자 입력값을 담을 변수
    		int res1, res2, res3, res4, res5;				//-- 각각의 연산 결과를 담을 변수
    
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    		// 연산 및 처리
    		System.out.print("첫 번째 정수 입력 : ");
    		num1 = Integer.parseInt(br.readLine());
    
    		System.out.print("두 번째 정수 입력 : ");
    		num2 = Integer.parseInt(br.readLine());
    
    		res1 = num1 + num2;
    		res2 = num1 - num2;
    		res3 = num1 * num2;
    		res4 = num1 / num2;
    		res5 = num1 % num2;
    
    		// 결과 출력
    		System.out.printf("\n====[결과]====\n");
    
    		System.out.printf("%d + %d = %d\n", num1, num2, res1);
    		System.out.printf("%d - %d = %d\n", num1, num2, res2);
    		System.out.printf("%d * %d = %d\n", num1, num2, res3);
    		System.out.printf("%d / %d = %d\n", num1, num2, res4);
    		System.out.printf("%d %% %d = %d\n", num1, num2, res5);
    
    		System.out.printf("======================\n");
    	}
    }
    
    // 실행 결과
    
    /*
    첫 번째 정수 입력 : 10
    두 번째 정수 입력 : 2
    
    ====[결과]====
    10 + 2 = 12
    10 - 2 = 8
    10 * 2 = 20
    10 / 2 = 5
    10 % 2 = 0
    ======================
    계속하려면 아무 키나 누르십시오 . . .
    */

    키보드 주요 특수문자 영문이름

    연산자(Operator) 실습
    - 비트 단위 연산자
    - 비트 쉬프트 연산자
    - 논리 연산자
    - 조건 연산자 : 삼항 연산자
    • Test022
      - 비트 단위 연산자 
      - '~' 비트 not
    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    		   - 비트 단위 연산자
    =================================================*/
    
    public class Test022
    {
    	public static void main(String[] args)
    	{
    		int a = 10, b = -10;
    
    		System.out.printf("~a : %d\n", ~a);				// bit not
    		System.out.printf("~b : %d\n", ~b);				// bit not
    	}
    }
    
    // 실행 결과
    
    /*
    ~a : -11
    ~b : 9
    계속하려면 아무 키나 누르십시오 . . .
    */
    
    /*
    a = 10 → (00000000 0000000 0000000) 00001010
    
    										↓ ~ a
    
    								1	 11110101 → -11			→ check → ok
    									+00001011 →  11
    								--------------------
    								     00000000 →   0
    							
    b = -10	→ (00000000 00000000 00000000)						→ 11110110
    										00001010 (양수 10)
    										↓ ~ b					↓ ~ b
    
    						 			    11110101			    00001001
    						  			   +	   1
    									   ---------
    									    11110110 → -10
    
    */

    • Test023
      - 비트 단위 연산자
      - '&' 비트 and, '|' 비트 or, '^' exclusive or
    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    		   - 비트 단위 연산자
    =================================================*/
    
    public class Test023
    {
    	public static void main(String[] args)
    	{
    		int a=13, b=7;
    		int c, d, e;
    											
    		c = a & b;							// 비트and
    		d = a | b;							// 비트or
    		e = a ^ b;							// exclusive or
    
    		System.out.printf("a & b = %d\n", c);
    		System.out.printf("a | b = %d\n", d);
    		System.out.printf("a ^ b = %d\n", e);
    
    	}
    }
    
    // 실행 결과
    
    /*
    a & b = 5
    a | b = 15
    a ^ b = 10
    계속하려면 아무 키나 누르십시오 . . .
    */
    
    
    /*
    		13	→ 0001101
    	&	 7	→ 0000111
    	------------------
    			   0000101 → 4 + 1 → 5
    
    		13	→ 0001101
    	|	 7	→ 0000111
    	------------------
    			   0001111 → 8 + 4 + 2 + 1 → 15
    
    		13	→ 0001101
    	^	 7	→ 0000111
    	------------------
    			   0001010 → 8 + 2 → 10
    */

    • Test024
      - 비트 단위 연산자
      - 두 변수에 담겨있는 내용(값) 바꾸기 swap : 『xor(^)』 연산자 활용
    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    - 비트 단위 연산자
    - 두 변수에 담겨있는 내용(값) 바꾸기 → 스왑(swap)
      → 『xor』 연산자 활용~!!! 
    =================================================*/
    
    public class Test024
    {
    	public static void main(String[] args)
    	{
    		// 주요 변수 선언 및 초기화
    		int x=20, y=23;									//-- 물컵, 우유컵
    
    		//int temp;										//-- 임시 저장 변수(빈 컵)
    
    		// 연산 처리 하기 전에
    		// 담겨 있는 내용물 확인
    		System.out.printf("x → %d, y → %d\n", x, y);
    
    
    		// 연산 및 처리
    		/*
    		temp = x;
    		x = y;
    		y = temp;
    		*/
    
    		/*
    		x=x^y;
    		y=y^x;
    		
    		x=x^y;
    		*/
    
    		
    		y=y^x;
    		x=x^y;
    		
    		y=y^x;
    		
    
    		// 결과 출력
    		System.out.printf("x → %d, y → %d\n", x, y);
    	}
    }
    
    // 실행 결과
    
    /*
    x → 20, y → 23
    x → 23, y → 20
    계속하려면 아무 키나 누르십시오 . . .
    */
    
    /*
    
    x=x^y;					→ x : 20	y : 23
    						→ x : 20 ^ 23
    
    						  00010100 → 20
    						^ 00010111 → 23
    						----------------
    						  00000011 →  3
    
    --------------------> x = 3
    
    y=y^x;					→ y : 23	x : 3
    						→ y : 23 ^ 3
    
    						  00010111 → 23
    						^ 00000011 →  3
    						----------------
    						  00010100 → 20
    						
    --------------------> y = 20
    
    x=x^y;					→ x : 3	y : 20
    						→ x : 3 ^ 20
    
    						  00000011 →  3
    						^ 00010100 → 20
    						----------------
    						  00010111 → 23
    
    --------------------> x = 23
    
    */

    • Test025
      - 비트 단위 연산자
    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    		   - 비트 단위 연산자
    =================================================*/
    
    public class Test025
    {
    	public static void main(String[] args)
    	{
    		int x = 128;		//	00000000 000000000 00000000 10000000
    
    		System.out.printf("x << 3 : %d\n", x << 3);
    		//	00000000 000000000 00000000 10000000
    		//					 ↓
    		//	00000000 000000000 00000100 00000000
    		//
    		//--==>> x << 3 : 1024
    
    		System.out.printf("x * 8 : %d\n", x * 8);
    		//--==>> x * 8  : 1024
    
    		System.out.printf("x >> 3 : %d\n", x >> 3);
    		//	00000000 000000000 00000000 10000000
    		//					 ↓
    		//	00000000 000000000 00000000 00010000
    		//					 ↓
    		//--==>> x >> 3 : 16
    
    		System.out.printf("x / 8 : %d\n", x / 8);
    		//--==>> x / 8  : 16
    		
    		System.out.printf("x << 24 : %d\n", x << 24);
    		//	00000000 000000000 00000000 10000000
    		//					 ↓
    		//	10000000 000000000 00000000 00000000				// MSB(부호화비트)가 1(음수)
    		//--==>> x << 24 : -2147483648
    		System.out.printf("x << 25 : %d\n", x << 25);
    		System.out.printf("x << 26 : %d\n", x << 26);
    		System.out.printf("x << 27 : %d\n", x << 27);
    		//					:
    		System.out.printf("x << 32 : %d\n", x << 32);
    		//--==>>
    		/*
    		x << 25 : 0
    		x << 26 : 0
    		x << 27 : 0
    		x << 32 : 128
    		*/
    	}
    }
    
    // 실행 결과
    
    /*
    x << 3 : 1024
    x * 8 : 1024
    x >> 3 : 16
    x / 8 : 16
    x << 24 : -2147483648
    x << 25 : 0
    x << 26 : 0
    x << 27 : 0
    x << 32 : 128
    계속하려면 아무 키나 누르십시오 . . .
    */

     

    • 자바의 독특한 성질


    • Test026
      - 논리 연산자
    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    		   - 논리 연산자
    =================================================*/
    
    public class Test026
    {
    	public static void main(String[] args)
    	{
    		boolean a=true, b=false;						// boolean a="true", b="false";		//--(X)
    
    		System.out.printf("a && b : %b\n", (a && b));		// %b 불린
    		System.out.printf("a || b : %b\n", (a || b));
    		System.out.printf("!a	  : %b\n", !a);
    		System.out.printf("!b	  : %b\n", !b);
    
    	}
    }
    
    // 실행 결과
    
    /*
    a && b : false
    a || b : true
    !a        : false
    !b        : true
    계속하려면 아무 키나 누르십시오 . . .
    */

    • Test027
      - 조건 연산자 == 삼항 연산자
    /*                   ┌─────────┐
    피연산자 연산자 피연산자 연산자 피연산자
    -----------              ------------             ------------
        1항                      2항                      3항
    피연산자     ?      피연산자      :       피연산자
    -----------              ------------              -------------
        1항                      2항                       3항
    1항의 연산 결과     → true   → 2항 수행(치환)
                                   → false → 3항 수행(치환)
    */
    더보기

    // 홀수인지 짝수인지에 대한 판별 연산
    // _______ ? _______ : _______;
    //  수식1     수식2     수식3

    // 수식1 : 참(true) 또는 거짓(false)을 반환할 수 있는 수식 형태로 작성
    // 수식2 : 수식1의 처리 결과가 참(true)일 경우 수행하는 영역
    // (조건연산자를 구성하는 전체 구문이 이 내용으로 덮어쓰기 된다고 이해하면 됨)
    // 수식3 : 수식1의 처리 결과가 거짓(false)일 경우 수행하는 영역
    // (조건연산자를 구성하는 전체 구문이 이 내용으로 덮어쓰기 된다고 이해하면 됨)

     

    조건 연산자는 중첩이 가능하다
    // 수식1 ? 수식2 : 수식3
                                -------- 수식1' ? 수식2' : 수식3' 으로 연결하여 사용이 가능!

    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    	   - 조건 연산자 == 삼항 연산자
    =================================================*/
    
    // 사용자로부터 임의의 정수를 입력받아
    // 입력받은 정수가 짝수인지 홀수인지 판별하는 프로그램을 구현한다.
    // 단, 조건연산자(삼항연산자)를 활용하여 문제를 해결할 수 있도록 한다.
    
    // 실행 예)
    // 임의의 정수 입력 : 8
    
    // ==[판별 결과]==
    // 8 → 짝수
    // ===============
    // 계속하려면 아무 키나 누르세요....
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Test027
    {
    	public static void main(String[] args) throws IOException
    	{
    		// 주요 변수 선언
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		int n;									//-- 사용자로부터 입력받은 임의의 정수를 담아둘 변수
    		String strResult;						//-- 홀수인지 짝수인지에 대한 판별 결과를 담게될 변수
    
    
    		// 연산 및 처리
    		System.out.print("임의의 정수 입력 : ");
    		n = Integer.parseInt(br.readLine());								// br.readLine() 생성하면서 throws IOException 필요 
    
    		// (n % 2 == 0) ? "짝수" : "홀수";
    		// n이 8일 때...
    		// (8 % 2 == 0) ? "짝수" : "홀수";
    		// (0 == 0) ? "짝수" : "홀수";
    		// (true) ? "짝수" : "홀수";
    		// "짝수";
    
    		// (n % 2 != 0) ? "홀수" : "짝수";
    		// n이 8일 때...
    		// (8 % 2 != 0) ? "홀수" : "짝수";
    		// (0 != 0) ? "홀수" : "짝수";
    		// (false) ? "홀수" : "짝수";
    		// "짝수";
    		
    		// "짝수";						//--(X)
    		//   vs.
    		//strResult = "짝수";			//--(O)		// check
    
    		// (n % 2 == 0) ? "짝수" : "홀수";				//--(X)
    		
    		strResult = (n % 2 == 0) ? "짝수" : "홀수";		//--(O)
    		// n이 39일 때...
    		// strResult = (n % 2 == 0) ? "짝수" : "홀수";
    		// strResult = (39 % 2 == 0) ? "짝수" : "홀수";
    		// strResult = (1 == 0) ? "짝수" : "홀수";
    		// strResult = (false) ? "짝수" : "홀수";
    		// strResult = "홀수";
    
    
    		// 결과 출력
    		System.out.println();
    		System.out.println("==[판별 결과]==");
    		System.out.printf("%d → %s\n", n ,strResult);
    		System.out.println("===============");
    	}
    }
    
    // 실행 결과
    
    /*
    임의의 정수 입력 : 39
    
    ==[판별 결과]==
    39 → 홀수
    ===============
    계속하려면 아무 키나 누르십시오 . . .
    */
    
    /*
    임의의 정수 입력 : 122
    
    ==[판별 결과]==
    122 → 짝수
    ===============
    계속하려면 아무 키나 누르십시오 . . .
    */

     

    // 개인적 감상

    더보기
    print, println, print의 구분 사용 방법 등 다양한 수식들로 관찰을 하여 기능과 에러 이유를 살펴보면서, 원하는 기능을 수행하게하기 위해서 기능의 구분을 잘 해둬야겠다고 생각했다.특수문자의 경우 많이 사용되고 있던 건 알고 있었지만 ~(틸드) 라던가 자주 사용함에도 불구하고 잘 몰랐던 용어들도 알게되었다. 협업을 위해서는 많이 사용되고 있는 기본 특수문자정도는 외워두는 것이 좋을 것 같다. 
    비트 연산을 보면서 진짜 내가 0과 1로 이루어진 컴퓨터에게 명령을 내리고 있구나 하는게 느껴진다.
    삼항 연산자를 배우면서 뇌가 조금 더 활성화 되어가는 느낌
    728x90
Designed by planet-si