[ java ] 연산자 & 조건문 (ifelse/ switch-case)

Suji Kang·2023년 12월 12일
0

🐾 1. 연산자

📌 조건 연산자 Conditional Operator

(조건식)?(참일 경우):(거짓일 경우)
조건식 -> 논리 연산자 + 비교 연산자를 이용해 조건식을 만듬

  • 참일 경우, 2번 자리에 있는 문장이 실행
  • 거짓일 경우, 3번 자리에 있는 문장이 실행
import java.util.Scanner;

public class ConditionalOperator {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int b = 10;
		b = ++b>10 && b<12 ? b++ : --b;
		//   true      true
		//        true
		System.out.println(b); //7
		
		int score = sc.nextInt();
		// score가 80 이상이면 "통과", 아니면 "재수강"
		String pass = score>=80?"통과":"재수강";
		System.out.println(pass); //70 나오면 재수강, 90점나오면 
		
		int i1 = sc.nextInt();
		int i2 = sc.nextInt();
		// 두 수의 차이 (절댓값으로 출력) -> 음수일 때는 -를 떼고
		int result = i1-i2>0 ? i1-i2 : i2-i1;
		System.out.println(result);
        //i1-i2: 5-3,->2
        //i2-i1: 3-5 =>2
	}
}

📌 복합 대입 연산자

산술,비트,시프트 + 대입
+,-,*,/,%
&,|,~,^
>>,<<,>>>

int a = 10;
a = a + 2; 👉 a += 2; // 12
a = a * 2; 👉 a *= 2; // 24
a = a & 2; 👉 a &= 2; // 2

🐾 2. 조건문 (제어문 1)

제어문: 코드의 흐름을 제어하는 문장

  • 조건문: 조건(참/거짓)을 확인해서 어떤 코드를 실행할지 결정
  • 반복문: 특정 횟수 또는 특정 조건에 따라서 코드를 반복

📌 조건문

  1. 단순 if문
  2. if-else문
  3. if-else if-else문
  4. switch-case문

1. 단순 if문

조건연산자와 비슷

if(조건식) {
  // 코드
}

조건식이 참이라면 코드 블럭 내부의 코드를 실행

int score = 70;
String pass = "재수강";
if(score >= 80) {
	pass = "합격";
}

.vs 조건연산자
단순if문은 거짓일때의 코드를 별도로 정의 할 수 없다.
참일 때의 코드를 여러 줄 쓸 수 있음.

import java.util.Scanner;

public class SimpleIf {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수를 입력해주세요 > ");
		int num = sc.nextInt();
		String result = "홀수";
		
		if(num % 2 == 0) {
			result = "짝수";
		}
		System.out.println(result);
		
        
        //조건 연산자
		String result2 = num % 2 == 0 ? "짝수" : "홀수";
		System.out.println(result2);
	}
}

2. if-else 문

if문의 조건식이 참이면, if 블럭 내부의 코드가 실행
거짓이면, else 블럭 내부의 코드가 실행

if(조건식) {
	// 코드
} 
else {
	// 코드
}

.vs 단순if문
거짓일 때의 코드를 정의할 수 있다
.vs 조건연산자
참과 거짓 모두 여러 줄의 코드를 작성할 수 있다

import java.util.Scanner;

public class IfElse {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("연도를 입력해주세요 (1901~2100) > ");
		int year = sc.nextInt();
		
		if(year >= 2001) {
			System.out.println("21세기 입니다.");
		}
		else {
			System.out.println("20세기 입니다.");
		}
		
		System.out.println(year >= 2001 ? "21세기" : "20세기");
	}
}

3. if - else if - else 문

  • else 문 뒤에 if를 추가로 붙인다
  • 여러 개의 조건을 확인할 수 있다
int a = 10;
if(a % 4 == 0) {
	// 코드
}
else if(a % 4 == 1) {
	// 코드
}
else if(a % 4 == 2) {
	// 코드
}
else {
	// 코드
}

if-else if-else문은 사이에 else if 문을 무한하게 추가할 수 있음

if-if-if의 나열과 if-else if-else 문의 차이점?

🔎 if-else if-else 👉 앞에서 참이 나왔다면 뒤의 조건은 확인X
🔎 if-if-if 👉 앞에서 참이 나왔더라도 뒤의 조건을 확인O

내가 만들고자 하는 코드가 조건이 어떠냐에 따라서 조건식의 종류를 잘 사용하기

4. 중첩 if 문 = if(else)문 안에 if문

if(a % 3 == 0)
else if(a % 3 == 1)
else

.vs

if(a % 3 == 0)
else {
  if(a % 3 == 1)
  else
}

📌 공통점: 앞에서 참이 나오면 그 뒤의 코드는 안 봄
📌 차이점: if 구조의 차이

📝 ex)

import java.util.Scanner;

public class IfExample {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int score = sc.nextInt();
		char grade1=' ', grade2=' ', grade3=' ';
		// 90~100 A, 80~89 B, 70~79 C, ~69 F
		
		// 단순 if문
		if(score >= 90 && score <= 100)
			grade1 = 'A';
		if(score >= 80 && score <= 89)
			grade1 = 'B';
		if(score >= 70 && score <= 79)
			grade1 = 'C';
		if(score <= 69)
			grade1 = 'F';
		
		// 중첩 if문
		if(score >= 90)
			grade2 = 'A';
		else { // score <= 89
			if(score >= 80)
				grade2 = 'B';
			else { // score <= 79
				if(score >= 70)
					grade2 = 'C';
				else // score <= 69
					grade2 = 'F';
			}
		}
		
		// if-else if-else 문
		if(score >= 90)
			grade3 = 'A';
		else if(score >= 80) // score <= 89
			grade3 = 'B';
		else if(score >= 70) // score <= 79
			grade3 = 'C';
		else // score <= 69
			grade3 = 'F';
		
		System.out.println(score+"점 "+grade1+" "+grade2+" "+grade3);
	}
}

📝 연습문제

점수와 학년
학년
1~3 -> 60점 이상 합격, 60점 미만 불합격
4 -> 70점 이상 합격, 70점 미만 불합격

import java.util.Scanner;

public class IfExample2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int score = sc.nextInt();
		int year = sc.nextInt();
		String pass = "";
		
		//단순 if문
		if(year <= 3 && score >= 60)
			pass = "합격";
		if(year <= 3 && score < 60)
			pass = "불합격";
		if(year == 4 && score >= 70)
			pass = "합격";
		if(year == 4 && score < 70)
			pass = "불합격";
		System.out.println(pass);
		
		String pass2 = "";
		// 중첩 if문 - 학년 > 점수
		if(year == 4) {
			if(score >= 70)
				pass2 = "합격";
			else
				pass2 = "불합격";
		}
		else { // 4학년이 아닌 경우
			if(score >= 60)
				pass2 = "합격";
			else
				pass2 = "불합격";
		}
		System.out.println(pass2);
		
		String pass3 = "";
		// 중첩 if문 + if-else if-else - 점수 > 학년
		if(score >= 70)
			pass3 = "합격";
		else if(score >= 60) { // score < 70
			if(year == 4)
				pass3 = "불합격";
			else // year != 4
				pass3 = "합격";
		}
		else // score < 60
			pass3 = "불합격";
		System.out.println(pass3);
	}
}


4. switch-case문 (값이 명확한 때에 사용)

변수(식)를 보고 그 변수의 값에 따라서 다른 코드가 실행

switch() {
	case1:
		문장;
		break;
	case2:
		문장;
		break;
	default:
		문장;
		break;
}

📝 switch-case문은 if문에서 1개의 변수/계산식에 대해서 이 값이냐?

import java.util.Scanner;

public class SwitchCase {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int score = sc.nextInt();
		// 90~100 A, 80~89 B, 70~79 C, ~69 F
		// score/10 -> 9, 10 A, 8 B, 7 C, 나머지 F
		char grade = ' ';
		switch(score/10) {
			case 10:
			case 9:
				grade = 'A';
				break;
			case 8:
				grade = 'B';
				break;
			case 7:
				grade = 'C';
				break;
			default:
				grade = 'F';
		}
		System.out.println(grade);
	}
}

만약 switch-case 문 내부에서 다른 값에 대해서 같은 코드를 처리하는 경우
여러 case를 아래와 같이 붙여 쓸 수 있음

case 1:
case 2:
 	// 코드
	break;

case문 내부에서 break는 switch 문을 부수고 나가는 문장
-> 반드시 의도한 대로 코드를 실행하려면 case 마다 break를 써야 한다

🔎 switch-case에서 사용 가능한 리터럴

public class SwitchCase2 {
	public static void main(String[] args) {
		// double d = 3.14;
		// switch 안에 실수 X
		
		// char 문자 O
		char a = 'A';
		switch(a) {
			case 'A':
			case 'B':
			case 'C':
				break;
		}
		
		// 정수 리터럴 byte
		byte b = 1;
		switch(b) {
			case 0:
			// case 128: -> 범위를 벗어날 수 X
				break;
		}
		
		// 정수 리터럴 short
		short c = 1;
		switch(c) {
			case 0:
			// case 32768: -> 범위 X
				break;
		}
		
		// 정수 리터럴 int
		int d = 1;
		switch(d) {
			case 0:
			// case 2147483648: -> 범위 X
				break;
			case 1+1: // 식도 됨
				break;
			case 0x2A: // 리터럴 됨 (42)
				break;
		}
		
		// String 문자열 리터럴
		String f = "사과";
		switch(f) {
			case "사과":
			case "배":
			// case '가': 문자 != 문자열
				break;
		}
		
		int g = 100;
		int h = 100;
		switch(g) {
			case 100:
			// case h: -> case에 변수 X
			// case h > 3:
			// case h+3:
				break;
		}
	}
}
  • 논리형(boolean) X
  • 문자(char) 리터럴 O
  • 정수(byte, short, int) 리터럴 O
    • case에서 범위를 벗어나면 X
    • case에서 수 끼리의 연산 O (1+1, 5*5)
    • case에서 수와 변수끼리의 연산 X
    • case에서 변수 X
    • case에서 진수 리터럴 O
  • 정수(long) X
  • 실수(float, double) X
  • 문자열(String) O
    • case에서 문자열 O 👉 길이 1짜리 문자열 O
    • case에서 문자 X 👉 길이 1짜리 문자 X

메뉴 입력 (Scanner)
딸기 or 사과 -> 10000원
배 or 수박 -> 15000원
레몬 -> 20000원
이외 -> 0원

if문 내에서 문자열 비교할 떄 == 비교 안됨

fruit = sc.next();
if(fruit.equals("딸기")) O
if(fruit == "딸기") X

switch-case

import java.util.Scanner;

public class Menu {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String fruit = sc.next();
		
		// switch-case
		int price1;
		switch(fruit) {
			case "딸기":
			case "사과":
				price1 = 10000;
				break;
			case "배":
			case "수박":
				price1 = 15000;
				break;
			case "레몬":
				price1 = 20000;
				break;
			default:
				price1 = 0;
		}
		
		System.out.println(price1);	
	}
}

단순 if문

import java.util.Scanner;

public class Menu {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String fruit = sc.next();
		
		// 단순 if문
		int price2 = 0;
		if(fruit.equals("딸기") || fruit.equals("사과"))
			price2 = 10000;
		if(fruit.equals("배") || fruit.equals("수박"))
			price2 = 15000;
		if(fruit.equals("레몬"))
			price2 = 20000;
		
		System.out.println(price2);
	}
}

if-else if-else문

import java.util.Scanner;

public class Menu {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String fruit = sc.next();
		
		// if-else if-else문
		int price3 = 0;
		if(fruit.equals("딸기") || fruit.equals("사과"))
			price3 = 10000;
		else if(fruit.equals("배") || fruit.equals("수박"))
			price3 = 15000;
		else if(fruit.equals("레몬"))
			price3 = 20000;
		else
			price3 = 0;
            
		System.out.println(price3);
	}
}
profile
나를위한 노트필기 📒🔎📝

0개의 댓글