고래씌

[JAVA] 4. 제어문(if) 본문

JAVA/JAVA 기초

[JAVA] 4. 제어문(if)

고래씌 2023. 10. 4. 17:26

1. If 문

※ 기본적으로 프로그램의 진행은 순차적으로 진행됨.
단, 이 순차적인 흐름을 바꾸고자 한다면 제어문을 이용해서 직접 제어 가능.
 
(1) 선택적으로 실행시키고자 할 때 => 제어문(if, switch)
(2) 반복적으로 실행시키고자 할 때 => 반복문(for, while, do~while)
(3) 그 외에는 => 분기문
 
- 조건문 : 조건식을 통해 참이나 거짓이냐를 판단해서 그에 해당하는 코드 실행
- 조건식  => 반드시 결과값 true/false이여야 함. 보통의 조건에는 비교연산자, 논리연산자를 주로 사용함
- 조건문에는 크게 if문, switch문으로 나뉨
 

1.1 단독 if문

[표현법]
if(조건식) {
   조건식이 true인 경우 실행할 코드
}
=> 조건식의 결과가 참일 경우 중괄호 블록 안의 코드가 실행
=> 조건식의 결과가 거짓일경우 중괄호 블록 안의 코드가 무시되고 넘어감
 
□ 삼항연산자를 조건문으로 바꿔보기

// 삼항연산자를 조건문으로 바꿔보기
public void method1() {

    // 사용자에게 정수값을 입력받은 후 양수다, 양수가 아니다를 출력
    Scanner sc = new Scanner(System.in);

    System.out.print("정수를 입력해 주세요 : ");
    int num = sc.nextInt(); // num > 0 ? "양수" : "음수"

    if(num > 0) {
        System.out.println("양수입니다");
    }

    if(num <= 0) {
        System.out.println("양수가 아닙니다");
    }

}

 
□ 단일if 및 if ~ else문

public void method2() {
    Scanner sc = new Scanner(System.in);
    System.out.print("정수를 입력하세요 : ");
    int num = sc.nextInt();

    String result = "양수가 아닙니다";
    if(num > 0) {
        result = "양수입니다";
    }

    System.out.println(result);

//		if(num > 0) {
//			// 조건식이 true인 경우 실행될 코드
//			System.out.println("양수입니다");
//		}else {
//			// 조건식이 false인 경우 실행될 코드
//			System.out.println("양수가 아닙니다");
//		}

□ if ~ else if 문
같은 비교대상으로 여러개의 조건을 제시해야될 경우 사용
 
if(조건식1) {
       조건식1이 true라면 실행할 코드
} else if {
      조건식2가 true라면 실행할 코드
} else if {
      조건식n이 true라면 실행할 코드
} [else {
      위 모든 조건식의 결과가 false라면 실행할 코드
      // return;  // 현재 메소드를 빠져나가는 역할을 수행
}]
 
★ return 문은 메소드를 종료하는 함수이기 때문에 사용하면 아래 내용 수행안하고 메소드가 종료되어 끝남!!!
 

public void method3() {
    Scanner sc = new Scanner(System.in);
    System.out.print("정수를 입력하세요 : ");
    int num = sc.nextInt();


    if(num > 0) {
        System.out.println("양수입니다");
    }else if(num == 0) {
        System.out.println("0입니다");
    }else {
        System.out.println("음수입니다");
    }

    // 가독성이 떨어짐
//		if(num > 0) {
//			System.out.println("양수입니다");
//		}else {
//			if(num == 0) {
//				System.out.println("0입니다");
//			}else {
//				System.out.println("음수입니다");
//			}
//		}
}
public void method5() {
    // 사용자에게 이름, 성별을 입력받아 남자인지 여자인지 출력하는 메소드

    Scanner sc = new Scanner(System.in);
    System.out.print("이름 : ");
    String name = sc.nextLine();

    System.out.print("성별 : ");
    char gender = sc.nextLine().charAt(0);

    // 출력예시 : x님은 x이다.
    // 성별 값을 잘못 입력한 경우 => 잘못입력하셨습니다 출력

    //		if(gender == 'M' || gender == 'm') {
    //			System.out.printf("%s님은 %s이다.", name, "남자");
    //		}else if(gender == 'F' || gender == 'f') {
    //			System.out.printf("%s님은 %s이다", name, "여자");
    //		}else {
    //			System.out.println("잘못입력하셨습니다");
    //		}

    String result = "";

    if(gender == 'M' || gender == 'm') {
        result = "남자";
    }else if(gender == 'F' || gender == 'f') {
        result = "여자";
    }else  {
        System.out.println("잘못입력하셨습니다");

	method5(); // 다시 이름과 성별을 입력할 수 있게끔 함수 호출

        // 현재 메소드를 빠져나가는 역할을 수행. 아래 print문으로 안내려가고 종료됨
        return; 
    }

System.out.printf("%s님은 %s이다.", name, result);
}

※ 특이케이스!!!
* 기본자료형 : boolean, byte, short, int, long, float, double, char
* 참조자료형 : 기본자료형이 아닌 모든 자료형 대표) String
 
- 문자열간의 동등비교(문자열 == 문자열)
- 동등할 수 있는 '==' 자료형은 기본자료형 밖에 없다! String형은 기본자료형 X
- 기본자료형간의 비교시에는 ==, != 사용가능하지만,
참조자료형은 동등비교 연산시 정상적으로 연산이 안됨.
왜냐하면, name과 같은 참조형 변수는 실제로 메모리에저 저장되어있는 주소값만 가지고 있기 때문!
 
Q. 그럼 어떻게 해야하나?
- 문자열.equals(비교문자열)로 비교하면된다. (동등성 비교)
- 문자열간의 동등비교를 할 때는 '메소드'를 통해 수행하여야 한다!
- equals() 반환값이 true or false 로 반환

public void method6() {

    Scanner sc = new Scanner(System.in);
    System.out.print("이름 : ");
    String name = sc.nextLine();

    // XXXX
//		if(name == "이고래") {
//			System.out.println("이고래님 반갑습니다");
//		}else {
//			System.out.println("누구세요?");
//		}


    if(name.equals("이고래")) {
        System.out.println("이고래님 반갑습니다");
    }else {
        System.out.println("누구세요?");
    }

}
public void method7() {
    Scanner sc = new Scanner(System.in);
    System.out.print("정수(양수)를 입력: ");
    int num = sc.nextInt();

    // 양수를 입력받고, 입력받은 값이 짝수인지 홀수인지 판별하는 프로그램
    // 양수를 입력하지 않은 경우, "양수가 아닙니다. 잘못 입력하셨습니다." 출력된 후 다시 한번 입력할 수 있게 메소드 재호출

    String result = "";

//		if(num > 0 && num % 2 == 0) {
//			result = "짝수입니다";
//		}else if(num > 0 && num % 2 != 0){
//			result = "홀수입니다";
//		}else {
//			System.out.println("양수가 아닙니다. 잘못 입력하셨습니다.");
//			method7();
//			return;
//		}
//		
//		System.out.println(result);

    if(num > 0) {
        if(num % 2 == 0) {
            result = "짝수입니다";
        } else {
            result = "홀수입니다";
        }
    }else {
        System.out.println("양수가 아닙니다. 잘못 입력하셨습니다.");
        method7();
        return;
    }

    System.out.println(result);

}