[JAVA기초][조건문] if-else문

포키·2022년 9월 30일
0

국비과정

목록 보기
9/73

오늘의 실수

  • 중복은 만악의 씨앗! 중복되는 부분은 최대한 변수로 묶어 없애기!
    단 두 번이라도 절대 XXXXXXXXXXXXXX
  • if조건문 -> &&와 ||를 잘 사용하기!!!!
  • 리팩토링 - 같은 코드도 어떻게 짜는가 (보기좋게, 중복없이, 짧게, 성능 등을 추구)
  • 클래스 이름, 변수 이름, 코드 중복 여부,
  • 블럭(ex if문)을 보면 수행이 보장되는 블럭인지 아닌지 확인할 것! 변수가 있다면 특히 더 확인!
  • 컴파일러는 변수(값)를 계산하지 않고 자료형만 확인함
    예를 들면 if문의 조건부에 boolean값이 들어가있는지만 확인한다. 값을 계산하지 않는다.
    즉, 조건이 무조건 true여도! 존재하지 않는 false인 경우까지 고려하여, 컴파일 error를 반환할 수 있는 것!

짝 프로그래밍 (Pair Programming)
30초씩 번갈아 프로그래밍을 하기
상승 작용이 있다

if-else문

if(조건식){
	A;
}
B;

/* 
만약 조건이 참이라면(true값) 프로그램은 A -> B를 실행한다.
만약 조건이 거짓이라면(false값) 프로그램은 A를 실행하지 않는다. (B만 실행한다.) 
*/
  • 조건식에는 boolean값이 들어감
  • if문 이후의 명령문이 한 문장이라면 {} 생략 가능
소개팅 간다;
if(예쁜가?){
	열심히 임한다;
} else {
	대충 임한다;
}
집에 간다;
  • if의 명령문과 else의 명령문은 둘 중 하나만 시행됨
소개팅 간다;
if(잘생겼는가?){
	열심히 임한다;
} else if(이야기가 잘 통하는가?){
	조금 생각해본다;
} else if(몸이 좋은가?){
	밥을 먹어본다;
} else {
	전화한다;
}
집에 간다;
  • if, elseif, else의 명령문 중 하나만 시행됨
    else가 없다면 아예 명령이 수행되지 않을 수 있음

예제 3-1

import java.util.Scanner;
//
public class EvenOdd{
	public static void main(String[] args){
		int number;
//
		Scanner sc = new Scanner(System.in);
		System.out.print("정수를 입력하시오: ");
		number = sc.nextInt();
//
	 	if (number % 2 == 0){
			System.out.println("입력된 정수는 짝수입니다.");
		} else {
			System.out.println("입력된 정수는 홀수입니다.");
		}
	}
}
  • 삼항연산자도 비슷한 역할을 할 수 있지만, 가독성이 매우 떨어지므로 잘 사용하지 않는다.
  • if-else문의 명령문은 반드시 중괄호{}로 묶어서 사용하자
int n = 5;
if (n != 5)
	if(n > 3)
    	System.out.println("A");
else
	System.out.println("B");
    
// 결과: 없음
/* else는 중괄호가 없을 때 가장 가까운 if와 짝이 됨
이는 들여쓰기 실수이며, 실제 컴퓨터가 받아들이는 의미는 다음과 같다. */

int n = 5;
if (n != 5)
	if(n > 3)
		System.out.println("A");
	else
		System.out.println("B");
        
// n이 5일 때 "B"가 나오게 하고 싶다면 아래와 같이 바꾸어야 한다.

int n = 5;
if (n != 5){
	if(n > 3){
    	System.out.println("A");
        }
} else {
	System.out.println("B");
}
    
// 결과는 "B"
// 실수하지 않도록 {}를 잊지 말자!

퀴즈1 - '그 해는 윤년인가요?'

import java.util.Scanner;
class Quiz1 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		//
		System.out.print("년도: ");
		int year = sc.nextInt();
		//
		if(year % 4 == 0 && year % 100 != 0){
			System.out.println("결과: 윤년입니다.");
		} else if(year % 400 == 0){
			System.out.println("결과: 윤년입니다.");
		} else {
			System.out.println("결과: 윤년이 아닙니다.");
		}
	}
}

다른 풀이 (읽고 쓰기 쉬운 코드)

import java.util.Scanner;
class Quiz1 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		//
		System.out.print("년도: ");
		int year = sc.nextInt();
		//
		boolean cond1 = ((year % 4) == 0)
		boolean cond2 = ((year % 100) != 0)
        boolean cond3 = ((year % 400) == 0)
        //
		if((cond1 && cond2) || cond3){
			System.out.println("결과: 윤년입니다.");
		} else {
			System.out.println("결과: 윤년이 아닙니다.");
		}
	}
}

퀴즈2 - '컵 사이즈는 small? large? medium?'

import java.util.Scanner;
class Quiz2 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		//
		System.out.print("컵 사이즈: ");
		int size = sc.nextInt();
		//
		if(size < 100){
			System.out.println("small");
		} else if(size < 200){
			System.out.println("medium");
		} else {
			System.out.println("large");
		}		
	}
}

다른 풀이 (디팩토링)

import java.util.Scanner;
class Quiz2 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		//
		System.out.print("컵 사이즈: ");
		int size = sc.nextInt();
		String result = "large";
		//
		if(size < 100){
			result = "small";
		} else if(size < 200){
			result = "medium";
		} 
		System.out.println(result);
	}
}

퀴즈3 - '당신은 표준 체중입니까?'

import java.util.Scanner;
class Quiz3 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		//
		System.out.print("키: ");
		int height = sc.nextInt();
		System.out.print("몸무게: ");
		int weight = sc.nextInt();
		//
		double stdWeight = (height - 100) * 0.9;
		String result = "표준체중";
		//
		if(weight < (stdWeight - 5)){
			result = "저체중";
		} else if(weight > (stdWeight + 5)){
			result = "과체중";
		}
		System.out.println("당신은 " + result + "입니다.");
	}
}

다른 풀이 (디팩토링) (중복 제거!!! +-5 -> sd))

import java.util.Scanner;
class Quiz3 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		//
		System.out.print("키: ");
		int height = sc.nextInt();
        //
		System.out.print("몸무게: ");
		int weight = sc.nextInt();
		//
		double stdWeight = (height - 100) * 0.9;
		String result = "표준체중";
        int sd = 5;
		//
		if(weight < (stdWeight - sd)){
			result = "저체중";
		} else if(weight > (stdWeight + sd)){
			result = "과체중";
		}
		System.out.println("당신은 " + result + "입니다.");
	}
}

Quiz4 - '컴파일 과정을 이해하고 error를 이해하자'

class Quiz4 {
	public static void main(String[] args){
    	int num;
        boolean flag = true;
        if(flag){
        	num = 5;
        }
    }
}
// 컴파일 가능!
// if문이 false일 때 num이 초기화되지 않지만, num을 불러내는 연산이 없으므로 가능
class Quiz4 {
	public static void main(String[] args){
    	int num;
        boolean flag = true;
        if(flag){
        	num = 5;
        }
        System.out.println(num);
    }
}
// ERROR!!
// if문이 false일 때 num이 초기화되지 않으므로 println(num)의 에러
class Quiz4 {
	public static void main(String[] args){
    	int num;
        boolean flag = true;
        if(flag){
        	num = 5;
        } else {
        	num = 6;
        }
        System.out.println(num);
    }
}
// 컴파일 가능!
// if문이 false일 때에도 num이 초기화되므로 가능
class Quiz4 {
	public static void main(String[] args){
    	int num;
        boolean flag = true;
        if(flag){
        	num = 5;
        } else if(!flag) {
        	num = 6;
        }
        System.out.println(num);
    }
}
// ERROR!!
// false일 때를 고려하는 else가 없으므로 에러
profile
welcome

0개의 댓글