Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Everything has an expiration date

029 - Java 삼항연산자를 이용하여 알파벳 대소문자 변환하기 프로그램 복습 + 소스코드 분석 본문

[Java]/review

029 - Java 삼항연산자를 이용하여 알파벳 대소문자 변환하기 프로그램 복습 + 소스코드 분석

Jelly-fish 2023. 8. 30. 23:22
/*=========================================
	■■■ 연산자(Operator) ■■■
	- 조건 연산자 == 삼항 연산자
===========================================*/

// 사용자로부터 임의의 문자 하나를 입력받아
// 대문자이면 소문자로...
// 소문자이면 대문자로...
// 알파벳이 아닌 기타 문자라면 그 문자를 그대로...
// 출력하는 프로그램을 구현한다.

// 실행 예)
// 한 문자 입력 : A
// A → a
// 계속하려면 아무 키나 누르세요...

// 한 문자 입력 : b
// b → B
// 계속하려면 아무 키나 누르세요...


// 한 문자 입력 : 7
// 7 → 7
// 계속하려면 아무 키나 누르세요...


package MyTest029;

import java.io.IOException;

public class MyTest029
{
	public static void main(String[] args) throws IOException
	{
		// 1. 변수 선언
		char chInputChar;
		char chResultChar;
		
		// 2. 사용자로부터 값 입력받기.
		System.out.print("한 문자 입력 : ");
		chInputChar = (char)(System.in.read());
		
		// 3. 알파벳이면 대소문자 변환, 알파벳이 아닌 문자면 그 문자 그대로.
		//    ※ 'A' : 65  →  'a' : 97  === 대문자에서 소문자로 변환하려면, 32값을 더해준다.
		//	  ※ 'a' : 97  →  'A' : 65  === 소문자에서 대문자로 변환하려면, 32값을 빼준다.		

				/*[Logic]▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤
					1. 입력한 문자가 알파벳 대문자인가?
							1 ▶ true  : 알파벳을 소문자로 변환한다. (ch + 32)
							1 ▶ false : 1-2. 입력한 문자가 소문자인가?
											1-2 ▶ true  : 알파벳을 대문자로 변환한다. (ch - 32)
											1-2 ▶ false : 입력 문자가 알파벳이 아니다! 입력 값 그대로 출력한다.
				▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤*/	
		
		// [Logic 을 삼항 연산자로 표현한다면?]=======================================================================
		//									
		// (1. 입력한 문자가 알파벳 대문자인가?)  ?  ( 알파벳을 소문자로 변환한다. ) : ( 알파벳이 소문자이거나 다른 문자이다.) 
		//                                		  -----------------------   		-----------------------------
		//								   		  1 ▶ true : 알파벳 대문자다!	  	  1 ▶ false : 알파벳 대문자가 아니다!
		
		// (1-2. 입력한 문자가 알파벳 소문자인가?)  ?  ( 알파벳을 대문자로 변환한다. ) : (   입력 문자가 알파벳이 아니다!   )														
		//											----------------------    		----------------------------
		//											1-2 ▶ true : (ch - 32)	  		1-2 ▶ false : 입력 값 그대로 출력한다.
		
		
		// (입력한 문자가 대문자?) ? (알파벳 소문자로 변환한다.) : ((입력한 문자가 소문자?) ? (알파벳 대문자 변환) : (입력 문자가 알파벳 아님))
		//  -----------------
		// 	   [조건문 ①]
		//					         --------------------       ----------------------------------------------------------
		//					       [조건문 ①이 참일 경우 실행]        [조건문 ①이 거짓일 경우 실행 (알파벳 대문자가 아니다)]
		
		//												            → 알파벳 소문자인지,
		//															  아니면 입력 문자가 알파벳이 아닌지 판별한다.
		//====================================================================================================
		
		chResultChar = (char)((chInputChar >= 'A') && (chInputChar <= 'Z') ? (chInputChar + 32) : ((chInputChar >= 'a') && (chInputChar <= 'z')  ?  (chInputChar - 32) : chInputChar));
		
		// [(char) 메소드로 강제 형변환 해주는 이유!!!] ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
		// 		◎ 대문자 → 소문자 연산 (chInputChar + 32)
		// 		◎ 소문자 → 대문자 연산 (chInputChar - 32)
		//
		// 			문자 char 타입 변수 chInputChar의 ASCII Code값과 정수 32를 덧셈 뺄셈 연산하는 과정에서
		//			연산 결과값이 < integer 타입 정수 형태 >로 바뀌었기 때문에,
		// 			삼항 연산자 수식 전체를 감싸서 강제 형변환 메소드 (char)를 적용시켜 주지 않으면
		// 			문자 타입(char) 변수 chResultChar ← 연산 결과 정수 값(integer)을 넣으려는 상황이 되므로!!
		//			반드시 (char) 메소드를 사용하여 char 타입 변수 chResultChar에 저장해 주도록 한다~!!!
		//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
		
		
		System.out.printf(">> %c → %c\n", chInputChar, chResultChar);
		
		
		
	}	

}

// 실행 결과

/*
한 문자 입력 : a
>> a → A
*/

/*
한 문자 입력 : D
>> D → d
*/

/*
한 문자 입력 : )
>> ) → )
*/