연산자,조건문(if, switch), - 0728

안씅👩🏻‍💻·2022년 7월 28일
0
post-thumbnail

🔗 복습하기

  • 타입 변환에는 자동적 타입변환(Promotion)강제적 타입변환(Casting)이 있음.
  • 자동적 타입변환(Promotion) : 작은 데이터 타입(작은 데이터 값)에서 큰 데이터 타입으로 자동 변환.
  • 강제적 타입변환(Casting) : 큰 테이터 타입이 작은 데이터 타입으로 변환.
    • 강제적 형변환(casting)을 실행한다는 의사표현을 해줘야 함.
    long longVal = (long) doubleVal; // (long)입력으로 casting 실행.
  • 3항 연산자(Ternary Operator) : 피연산자 갯수가 3개 라는 의미.
    • A ? B : C
      ➡️ Atrue 이면 B를 실행하고, AfalseC실행해라.



연산자

1️⃣ 비교 연산자

  • ==, !=, <, >, <=, >=

  • 대소(<, <=, >, >=) 또는 동등(==, !=) 비교해서

  • boolean 타입 true/false 산출함.

  • 비교 연산자char를 사용할 경우 , 유니코드(unicode) 값으로 비교함.
  • 실수값들에 대하여 비교 연산자를 사용하지 말 것.(오차가 있기 때문에)
    • 만약에 꼭 사용해야 한다면, 실수를 정수화 한 수 사용할 것

✍️ 비교 연산자 사용하기(실습)

⌨️ coding ⤵️

package p01.basic;

public class RelationalOperatorEx2 {

	public static void main(String[] args) {
		char ch1 = 'A';
		char ch2 = 'B';
		
		boolean bResult = (ch1 <ch2);
		System.out.println("bResult = " + bResult);
		
		double d1 =0.1;
		float f1 = 0.1f;
		
		bResult = (d1 == f1);
		System.out.println("bResult = " + bResult);
		
		bResult = (d1 == 0.1); //0.1이 double타입으로 저장됨.--> 실행가능
		System.out.println("bResult = " + bResult);//--> 권장하지 않음.
		
		bResult = ((int)(d1*10) == 1); //0.1이 double타입으로 저장됨.--> 실행가능
		System.out.println("bResult = " + bResult);
		
		bResult = ((float)d1 == f1);
		System.out.println("bResult = " + bResult);
		
	}

}

🖥 print ⤵️



2️⃣ 증감 연산자

increment operator : ++ (증가)
decrement operator : -- (감소)

  • 증감 연산자변수(val) 뒤에 있으면, 다른 연산자 먼저 처리 후 증감 연산자 처리

IncrementOperatorEx

  • n1++ == n1+1

  • c언어 스타일임. (c++, java)


✍️ increment operator : ++ (증가)(실습)

⌨️ coding ⤵️

package p02.inc_dec;

// increment operator : ++

public class IncrementOperatorEx {

	public static void main(String[] args) {

		int n1 = 10;
		int result;
		
		System.out.println("n1= " + n1);
		n1++; // n1 += 1, (n1 = n1 + 1)와 같은 의미
		System.out.println("n1= " + n1);
			
		
		++n1; // n1 += 1
		System.out.println("n1= " + n1);
		
		result = n1++; // result = n1;처리 후,  m1 += 1;실행
		System.out.println("result= " + result);
		System.out.println("n1= " + n1);
		
		result = ++n1; // n1 += 1;처리 후, result = n1;실행
		System.out.println("result= " + result);
		System.out.println("n1= " + n1);
		
		
	}

}

🖥 print ⤵️



✍️ decrement operator : -- (감소)(실습)

⌨️ coding ⤵️

package p02.inc_dec;

// decrement operator : --

public class DecrementOperatorEx {

	public static void main(String[] args) {

		int n1 = 10;
		int result;
		
		System.out.println("n1= " + n1);
		n1--; // n1 -= 1, (n1 = n1 - 1)와 같은 의미
		System.out.println("n1= " + n1);
			
		
		--n1; // n1 -= 1
		System.out.println("n1= " + n1);
		
		result = n1--; // result = n1;처리 후,  n1 -= 1;실행
		System.out.println("result= " + result);
		System.out.println("n1= " + n1);
		
		result = --n1; // n1 -= 1;처리 후, result = n1;실행
		System.out.println("result= " + result);
		System.out.println("n1= " + n1);
		
		
	}

}

🖥 print ⤵️



3️⃣ 실수 산술 연산

  • 가급적 '실수'로 산술연산은 하지 않는 것이 좋음.
    -> 오차 발생함.


✍️ 실수 산술 연산이 잘못된 경우(실습)

  • '실수'로 산술 연산시 데이터 타입을 잘못 사용한 경우.

    ⌨️ coding ⤵️

package p03.realnumber_problem;

public class RealNumberWrongUseEx {

	public static void main(String[] args) {

		float f1 = 0.1f;
		double d1 = 0.1;
		
		System.out.println("f1 = " + f1);
		System.out.println("d1 = " + d1);

//		-------------------------------------------------		
		
		int apple = 1;
		double pieceUnit = 0.1d;
//		float pieceUnit = 0.1f; --> 데이터 타입을 바꿔서 에러 수정 가능
		int number = 7;
		
		double result = apple - number * pieceUnit;
        // 실수로 산술 연산을 하면 오류가 발생함.
		
		System.out.println("사과 1개에서 ");
		System.out.println("0.7 조각을 빼면, ");
		System.out.println(result + "조각이 남음 "); 
        
        // pieceUnit의 데이터 타입이 너무 크게 주어져서 생긴 결과임.
		
	}

}

🖥 print ⤵️

  • 데이터 타입을 수정해 원하는 결과를 뽑아낼 수 있음.

⌨️ coding ⤵️

package p03.realnumber_problem;


// 프로그램에서 실수로 산술 연산을 가급적 하지 말 것.(오차 발생함.)
public class RealNumberWrongUseEx {

	public static void main(String[] args) {

		float f1 = 0.1f;
		double d1 = 0.1;
		
		System.out.println("f1 = " + f1);
		System.out.println("d1 = " + d1);
		
//		-------------------------------------------------
		
		int apple = 1;
//		double pieceUnit = 0.1d;
		float pieceUnit = 0.1f;
		int number = 7;
		
		double result = apple - number * pieceUnit;
		
		System.out.println("사과 1개에서 ");
		System.out.println("0.7 조각을 빼면, ");
		System.out.println(result + "조각이 남음 ");
		
	}

}

🖥 print ⤵️





👩🏻‍💻 Infinity와 NaN

1️⃣ Infinity와 NaN

  • Infinity : 부모를 0으로 나눌 경우

    • 5 / 0 ➡️ Inifinity
  • NaN : Not a Number

    • 5 % 0 는 연산 할 수 없음 ➡️ NaN
  • InfinityNaN을 이용해 연산 가능 여부를 확인 할 수 있음.


✍️ Infinity와 NaN 산출 가능 여부 프로그램(실습)

⌨️ coding ⤵️

public static void main(String[] args) {

	int x = 5;
	double y = 0.0;
	double z;
		
	z = x/y; // 5/0 = infinity
		
	System.out.println("z = " + z);
		
	if ((Double.isInfinite(z)) || (Double.isNaN(z))) {
		System.out.println("z의 값을 산출 할 수 없습니다.");
	}else {
		z = z+2;
	}
		
//------------------------------------------------
		
	z = x%y; // 5%0 = NaN
		
	System.out.println("z = " + z);
		
	if ((Double.isInfinite(z)) || (Double.isNaN(z))) {
		System.out.println("z의 값을 산출 할 수 없습니다.");
	}else {
		z = z+2;
	}
		
}

🖥 print ⤵️



2️⃣ currentTimeMillisecond 메소드 사용하기

.currentTimeMillisecond메소드

  • 1970년1월1일 0시0분0초를 기준으로 현재까지1/1000초단위 숫자 리턴한 값.

  • 1day = 24 * 60 * 60 * 1000 second

✍️ 더하기 퀴즈 내는 프로그램(실습)

  • 2개의 숫자를 프로그램 내부에서 자동 생성해, 더하기 퀴즈를 내는 프로그램.

    ⌨️ coding ⤵️


long currentTimeMillisecond = System.currentTimeMillis();
		
int num1 = (int) (currentTimeMillisecond % 10) ;
// num1 =  0~9

int num2 = (int) (currentTimeMillisecond / 100 % 10) ;
/*
*  % 10 --> 마지막 숫자 자져옴
*  / 10 % 10 --> 마지막에서 두번째 숫자 가져옴
*  / 100 % 10 --> 마지막에서 세번째 숫자 가져옴
*/
		
System.out.println("currentTimeMillisecond = " + currentTimeMillisecond);
// 1970년1월1일 0시0분0초를 기준으로 현재까지 1/1000초 단위 숫자 return한 값 출력	
System.out.println("num1 =" + num1);
System.out.println("num2 =" + num2);
		
System.out.println("숫자"+ num1 + "과 숫자"+ num2 + "의 합계는 얼마인가?");
// 숫자 2개를 콘솔창에 제시함.
		
Scanner input = new Scanner(System.in); 
// 콘솔창에 사용자로부터 값을 받음.
		
int answer = input.nextInt(); 
// 콘솔에서 받은 값을 answer에 넣음.
		
boolean bCorrect = ((num1+num2) == answer); 
//boolean 참/거짓을 구별해 출력함.
//num1과 num2를 더한 값이 콘솔에서 입력 받은 값과 같은지 구별해 참/거짓 출력.
System.out.println(num1 + "+" + num2 + "=" + answer + "가 맞는가요?" + bCorrect);

}

🖥 print ⤵️



✍️ 입력된 숫자를 분으로 출력하기(실습)

⌨️ coding ⤵️

Scanner input = new Scanner(System.in);
System.out.println("3600이하의 숫자를 입력하세요"); 
// 
		
int seconds = input.nextInt();
				
int minutes = seconds / 60;
int remainingSeconds = seconds % 60;
		
System.out.println("입력된"+ seconds + "초를 계산하면" + minutes + "분" + remainingSeconds + "초 입니다.");

🖥 print ⤵️



✍️ 현재시간 출력하기(실습)

⌨️ coding ⤵️

long totalMilliSeconds = System.currentTimeMillis();
System.out.println( "totalMilliSeconds"+ totalMilliSeconds);
		
long totalSeconds = totalMilliSeconds / 1000; 
// 1 milliseconds는 1 seconds * 10^-3
// 1 seconds는 1 milliseconds / 10^-3
System.out.println("totalSeconsds = "+ totalSeconds);
				
long currentSecond = totalSeconds % 60;
//1 seconds는 1 miniute / 60
//1 miniute은 1 seconds % 60
System.out.println("currentSecond = "+ currentSecond);
		
long totalMininte = totalSeconds / 60;
System.out.println("totalMininte = "+ totalMininte);
		
		
long currentMininte = totalMininte % 60;
System.out.println("currentMininte = "+ currentMininte);
		
long totalHours = totalMininte / 60;
		
long currentHours = totalHours % 24;
System.out.println("현재시간은 " + currentHours + "시" + 
					currentMininte + "분" + currentSecond +"초 입니다" );

🖥 print ⤵️



✍️ 화씨를 섭씨로 바꿔주는 프로그램 만들기.(실습)

⌨️ coding ⤵️

Scanner input = new Scanner(System.in);
		
System.out.println("화씨를 입력하세요");
double fahrenheit = input.nextDouble();
		
double celcius = (5.0/9) * (fahrenheit - 32);
// double celcius = ((double)5/9) * (fahrenheit - 32); //위와 같은 표현임.
System.out.println("입력된 화씨 " + fahrenheit + "는 섭씨" + celcius + "도 입니다.");

🖥 print ⤵️





👩🏻‍💻 제어문(Loop)

🔍제어문이란?

  • 정상적인 코드 흐름위에서 아래왼쪽에서 오른쪽으로 흐름.

    • 하지만 특정 단계를 만들면 개발자가 원하는 방향으로 제어할 수 있음
  • 제어문 안에 제어문 쓸 수 있음.(중첩제어문)

    • 그래서 같은 프로그램을 만들더라도 개발자마다 다른 코드가 나옴.

1️⃣제어문 종류

  • 조건문
    if문 switch문

  • 반복문
    for문 while문 do-while문

  • break문

  • continue문

  • 중첩 제어문

제어문이 필요한 사례

  • 동일한 일을 반복해서 해야할 때 유용함.
    ex) 전교생 시험 점수 평균 구하기...



👩🏻‍💻조건문

1️⃣ if문

if (boolean or 변수) {A} else {B}형식으로 사용.

➡️boolean 값이 trueA실행; falseB실행

✍️ if문(실습)

⌨️ coding ⤵️

Scanner input = new Scanner(System.in);
	int radius = input.nextInt();
		
	double area = 0.0;
		
	area = radius * radius * 3.14;
	System.out.println("원의 면적은 " + area + "입니다.");
	// 음수 값을 넣어도 결과 값이 나옴 
		
//---------------------------------
		
	// 음수 값을 넣으면 안되도록 if문 사용
	if (radius >= 0) {
		area = radius * radius * 3.14; 
		System.out.println("원의 면적은 " + area + "입니다.");
	} else {
		System.out.println("반지름은 양수를 입력하셔야 합니다.");
	}

🖥 print ⤵️


💡: if문 다음에 오는 명령어가 1개만 있느면 {}를 사용하지 않아도 실행 가능함.

🧑🏻‍🏫 : "중괄호를 사용하지 않는 방법은 나중에 line이 늘어나면 알아보기 힘들어요. 가독성을 생각해 별로 추천하지 않는 방법입니다."

✍️ if ~ else if ~ else문(실습)

⌨️ coding ⤵️

		int score = 85;

		if (score >= 90) {
			System.out.println("A등급입니다.");
		} else if (score >= 80) {
			System.out.println("B등급입니다.");
		} else if (score >= 70) {
			System.out.println("C등급입니다.");
		} else if (score >= 60) {
			System.out.println("D등급입니다.");
		} else if (score >= 50) {
			System.out.println("E등급입니다.");
		} else {
			System.out.println("F등급입니다.");
		}

🖥 print ⤵️



1️⃣ Math.random() 메소드 사용하기.

  • Math.random()은 리턴 값을 0~0.99999사이의 실수값 넘김.

  • Math.random()*10은 0~9.99999 값을 넘겨줌.

  • (int)(Math.random()*10)은 0 ~ 9 사이의 정수값을 받을 수 있음.

✍️ Math.random() 뺄셈 퀴즈 프로그램 만들기(실습)

/*

  • 뺄셈 퀴즈 : 2개의 정수로 부터 뺄셈 연산 수행
    1. 항상 결과 값은 양의 정수로 출력 (n1 n2 가 있을 때 항상 n1이 n2보다 커야함.)
    1. 2개의 정수 값은 0~9 사이의 숫자
      */

⌨️ coding ⤵️

int num1 = (int) (Math.random() * 10);
int num2 = (int) (Math.random() * 10);

if (num1 < num2) {

	// 3개의 숫자를 맞바꾸는 로직 {swapping}
	int temp;
	temp = num1;
	num1 = num2;
	num2 = temp;
    
}

System.out.println("num1이 " + num1 + "이고, " + 
	" num2가 " + num2 + "인 경우 num1 - num2의 값은?");

Scanner input = new Scanner(System.in);
int answer = input.nextInt();

if ((num1 - num2) == answer) {
	System.out.println("맞음");
} else {
	System.out.println("틀림");
	System.out.println(num1 + "-" + num2 + "는 " + (num1 + num2) + "임.");
}

🖥 print ⤵️



3️⃣ 중첩 if문

  • 가급적 중첩 if문은 사용하지 않는 것이 바람직함.
    • *연속성이 없어짐.
    • 만약 사용해야한다면, depth를 최대한 간단하고 알아보기 쉽게 만들어야함.
    • 제어문 중간에 에러가 나도 어디서 났는지 알 수 없기 때문에 후수정이 어려움.

*연속성 : 소스파일을 유지보수해서 계속 사용할 수 있도록 하는 것을 의미함.

✍️ 중첩 if문(실습)

⌨️ coding ⤵️

int i = 10;
int j = 5;
int k = 7;

	if (i > k) {
	if (j > k) {
		System.out.println("i와 j는 k보다 큽니다.");
	} else {
		System.out.println("k는 i보다 작지만 j보다 큽니다.");
	}
	} else {
		System.out.println("i는 k보다 작거나 같습니다.");
	}

🖥 print ⤵️



4️⃣ switch문

  • 변수나 연산식의 값에 따라 실행문 선택할 때 사용.

  • break : 해당 case만 실행하고 switch문을 빠져나오게 하는 효과.

  • 중간에 break를 넣으면 연산식이 switch문을 빠져나오면서 나머지 값을 다 가지고 나옴.

  • 조건이 아닌 경우를 나누는 if else문과 다르게
    switch문case에 맞는 경우만 찾고 break.

  • 가능하면 switch문을 많이 사용하는 것을 권함.

    • 깔끔하고 알아보기 쉽게 코드를 짤 수 있음.
  • switch문 사례
    : 주사위, 달력, 회사직급 처럼 등급이 정해져 있는 경우에 사용하기 좋음.

✍️ 랜덤으로 주사위 값 받기.(실습)

⌨️ coding ⤵️

//diceNumber는  1 2 3 4 5 6 중에 하나
int diceNumber = (int) (Math.random()*6+1);
		
System.out.println("diceNumber = "+ diceNumber);
		
	switch (diceNumber) {
	case 1: // if (diceNumber == 1)
		System.out.println("주사위 1 나왔습니다.");
		break;
	case 2: //else if (diceNumber == 2)
		System.out.println("주사위 2 나왔습니다.");
		break;
	case 3: // else if (diceNumber == 3)
		System.out.println("주사위 3 나왔습니다.");
		break;
	case 4: // else if (diceNumber == 4)
		System.out.println("주사위 4 나왔습니다.");
		break;
	case 5: // else if (diceNumber == 5)
		System.out.println("주사위 5 나왔습니다.");
		break;
	default: // else  (diceNumber == 6)
		System.out.println("주사위 6 나왔습니다.");
		break;
	}

🖥 print ⤵️



5️⃣ switch문에서 case에 사용 가능한 데이터 타입

  • 정수형 데이터 타입 : byte char short int long string

💡: floatdouble은 사용 불가
➡️ 오차가 있어서(불확실함)


✍️ Switch문 If~ else if문으로 바꾸기 (실습)

⌨️ coding ⤵️

char grade = 'A';

	switch (grade) {
		case 'A':
		case 'E':
		case 'B':
		System.out.println("우수 회원입니다.");
			break;
		case 'C':
		case 'D':
			System.out.println("일반 회원입니다.");
			break;
		}

//----------------------------------------------------
		
		//if문으로 바꿔주면 
		
	if ((grade == 'A')||(grade == 'E' ) ||(grade == 'B' )) {
		System.out.println("우수 회원입니다.");
	}else if ((grade == 'C')||(grade == 'D' )) {
		System.out.println("일반 회원입니다.");
	}

🖥 print ⤵️

profile
그냥 은근슬쩍 살다 가긴 싫어

0개의 댓글