Notice
Recent Posts
Recent Comments
Link
Everything has an expiration date
029 - Java 삼항연산자를 이용하여 알파벳 대소문자 변환하기 프로그램 복습 + 소스코드 분석 본문
/*=========================================
■■■ 연산자(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
*/
/*
한 문자 입력 : )
>> ) → )
*/