Backend/Java

Java 문법 2주차 2-6,7,8 if, switch, for (조건문, 반복문)

chillmyh 2023. 11. 21. 18:24

2-6

조건문 :

특정 조건에 따라 다른 연산을 수행하고 싶을 때 조건문

물이 끓으면 강불에서 약불로 줄여주세요 - if, switch

 - 물이 끓으면(조건) -> 약불로 줄여줘(연산 수행)

반복문 :

특정 조건에 따라 반복해서 동일한 연산을 수행하고 싶을 때 반복문

하얗게 색이 변하기 전까지 계속 저어주세요 - for

 - 하얗게 색이 변하기 전까지(조건) -> 계속 저어주세요(반복해서 연산수행)

 

조건문

package week02;

public class W11 {
    public static void main(String[] args) {
        boolean flag = true;

//        if () {} // if문의 주 골격!
        if (flag) {
            // true인 경우
            System.out.println("값이 true입니다.");
        } else {
            // false인 경우
            System.out.println("값이 false입니다.");
        }
    }
}

else if 는 확장이 가능하다.

 

package week02;

public class W11 {
    public static void main(String[] args) {
        // 조건문
        int number = 2;

        if (number == 1) {
            System.out.println("number값은 1입니다.");
        } else if (number == 2) {
            System.out.println("number값은 2입니다."); // 변수 number을 2로 선언했기 때문에 출력
        } else {
            System.out.println("number값은 모르는 값입니다.");
        }
    }
}

 

 

중첩 if 문

package week02;

public class W12 {
    public static void main(String[] args) {
       // 중첩 if문
        boolean flag = true;
        int number = 2;

        if (flag) {
            System.out.println("flag가 true입니다.");
            if (number == 1) {
            } else if (number == 2) {
                System.out.println("flag값은 true고, number값은 2입니다."); // flag값은 true, number는 2임으로 출력
            } else {
                System.out.println("flag값은 true고, number값은 모르겠습니다.");
            }
        } else {
            if (number == 1) {
                System.out.println("flag가 false이고, number값은 1입니다.");
            } else if (number == 2) {
                System.out.println("flag값은 false이고, number값은 2입니다.");
            } else {
                System.out.println("flag값은 false이고, number값은 모르겠습니다.");
            }

        }
    }
}

 

중첩 if문 응용 - 가위바위보 만들기

 

package week02;

import java.util.Objects;
import java.util.Scanner;

public class W13 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // A에게 값 입력받기
        System.out.println("A 입력 : ");
        String aHand = sc.nextLine();

        // B에게 값 입력받기
        System.out.println("B 입력 : ");
        String bHand = sc.nextLine();

        // 두 개의 값을 비교하는 메서드 -> Objects.equals(좌, 우) : 좌 우가 같은 경우 true, 다른 경우 false
        if (Objects.equals(aHand, "가위")) { // aHand에 가위 를 입력했을때
            if (Objects.equals(bHand, "가위")) { // bHand에 가위 를 입력했을때
                System.out.println("A와 B는 비겼습니다.");
            } else if (Objects.equals(bHand, "바위")) { // '' 바위를 입력했을때
                System.out.println("B가 이겼습니다.");
            } else if (Objects.equals(bHand, "보")) { // '' 보를 입력했을때
                System.out.println("A가 이겼습니다.");
            } else {
                System.out.println("B가 이상한 값을 입력했습니다."); // B가 가위, 바위, 보 가 아닌 다른걸 입력했을때
            }
        } else if (Objects.equals(aHand, "바위")) {
            if (Objects.equals(bHand, "가위")) {
                System.out.println("A가 이겼습니다.");
            } else if (Objects.equals(bHand, "바위")) {
                System.out.println("A와 B는 비겼습니다.");
            } else if (Objects.equals(bHand, "보")) {
                System.out.println("B가 이겼습니다.");
            } else {
                System.out.println("B가 이상한 값을 입력했습니다.");
            }
        } else if (Objects.equals(aHand, "보")) {
            if (Objects.equals(bHand, "가위")) {
                System.out.println("B가 이겼습니다.");
            } else if (Objects.equals(bHand, "바위")) {
                System.out.println("A가 이겼습니다.");
            } else if (Objects.equals(bHand, "보")) {
                System.out.println("A와 B는 비겼습니다.");
            } else {
                System.out.println("B가 이상한 값을 입력했습니다.");
            }
        } else {
            System.out.println("A가 이상한 값을 입력했습니다."); // A가 가위, 바위, 보 가 아닌 다른걸 입력했을 때
        }
    }
}

 

출력

A 입력 : 
가위
B 입력 : 
바위
B가 이겼습니다.

 

-

 

2-7

switch(피연산자) / case(조건)

switch 문은 case 문과 함께 사용하며 if문 보다 좀더 가독성이 좋은 조건문 표현식이다.

 - 형태 : switch(피연산자) { case(조건): (연산) } 

 - switch(피연산자)가 case(조건)을 만족하면 case : 뒤에 명시되어 있는 연산을 수행한다!

 - case(조건): (연산) 은 여러개를 설정할 수 있다.

   - 각 case 의 연산문 마지막에는 break; 를 꼭 넣어줘야 한다! 안그러면 밑으로 계속 흘러 switch문 블럭이 끝날 때까지 전부 실행.

switch문 중괄호 안의 제일 마지막에 default: (연산)을 명시해주어 case 조건들이 모두 만족하지 않을 때 수행할 연산을 정해주어야 한다.

 - default : (연산)은 아무것도 만족하지 않을 때 수행하는 것이라, 없다면 생략가능

 

package week02;

public class W14 {
    public static void main(String[] args) {
        int month = 8;
        String monthString = "";

        // switch문
        switch(month) {
            // case~~~ 연산
            case 1:
                monthString = "1월";
                break;
            case 2:
                monthString = "2월";
                break;
            case 3:
                monthString = "3월";
                break;
            case 4:
                monthString = "4월";
                break;
            case 5:
                monthString = "5월";
                break;
            case 6:
                monthString = "6월";
                break;
            case 7:
                monthString = "7월";
                break;
            case 8:
                monthString = "8월";
                break;
            case 9:
                monthString = "9월";
                break;
            case 10:
                monthString = "10월";
                break;
            case 11:
                monthString = "11월";
                break;
            case 12:
                monthString = "12월";
                break;
            default:
                monthString = "알 수 없음";
        }
        System.out.println(monthString);
    }
}

 

if문과 switch 문의 차이점

1. 복합조건

 - if 문은 복합조건을 지원한다.

   복합조건 : 괄호 () 안에 조건 여러개를 지정하여 조건문을 수행할 수 있다.

 - switch 문은 피연산자 한개에 대한 조건만을 지원한다.

2. 코드중복

 - if 문은 상대적으로 코드중복이 많다. ex) 위의 가위바위보 코드

 - switch 문은 코드중복이 적다. 따라서 가독성이 좋음.

 

 

2-8

반복문 for, while, do-while

for문

 - 특정 조건에 따라 연산을 반복(끊지 않을때 까지 계속=>실수하면 영원히)해서 수행하고 싶을 때 사용하는 문맥.

형태 : for(초기값; 조건문; 증가연산) {(연산)}

    -> 특정 조건을 초기값조건문을 통해 정의 -> 반복할때마다 값을 증가 시키려면 증가연산을 정의

    -> 초기값조건문을 만족할때까지 (연산)을 수행하면서 회차마다 증가연산을 수행한다.

 

package week02;

public class W15 {
    public static void main(String[] args) {
        // for문
        // (초기값; 조건문; 증가연산)
        for (int i=0; i < 4; i++) { // 초기값은 i=0; i < 4가 될때까지; i에 1씩 더해라
            System.out.println(i + " 번째 출력!");
        }
    }
}

 

향상된 for문 -> 보통 배열과 같이 사용.

package week02;

public class W15 {
    public static void main(String[] args) {
        // 향상된 for문
        // 기존 : for문 안에 3개의 표현이 들어감 -> (초기값; 조건문; 증가연산)
        // 향상된 for문 : 2개로 줄여줌
        int[] numbers = {3, 6, 9, 12, 15};
        for (int number: numbers) {
            System.out.print(number + " ");
        }
    }
}

위 코드를 보통 for문으로 구현한다면 아래와 같다.

 

package week02;

public class W15 {
    public static void main(String[] args) {
       int[] numbers = {3, 6, 9, 12, 15};
       for (int i=0; i < numbers.length; i++) { // i < numbers.length 대신 i < 5도 같은 기능을 한다.
           System.out.print(numbers[i] + " ");
       }
    }
}