If문

황상익·2023년 12월 15일

열혈 자바

목록 보기
4/30

if문과 if ~ else

public class Main1 {
    public static void main(String[] args) {
        int n1 = 5;
        int n2 = 7;

        if (n1 < n2){
            System.out.println("n1 < n2 is true");
        }

        if (n1 == n2){
            System.out.println("n1 == n2 is true");
        } else {
            System.out.println("n1 = n2 is false");
        }
    }
}

if 문의 골격
if ( true or false) {
조건 true 시 실행되는 영역
}
True가 오면 이어서 등장하는 중괄호 내부가 실행, false가 등장하면 이부분 생략
If else문 골격
if ( true or false) {
조건 true 시 실행되는 영역
} else {
조건 false시 실행되는 영역
}

경계를 생략

if (n1 < n2)
    System.out.println("n1 < n2 is true");


if (n1 == n2)
        System.out.println("n1 == n2 is true");
     else 
        System.out.println("n1 = n2 is false");

경계를 구분하는 중괄호를 생략 할 수 있는 이유는 if 절과 else문이 속한 문장이 하나

If ~ else if ~ else문
public class Main2 {
public static void main(String[] args) {
int num = 120;
if (num < 0){
System.out.println("0 미만");
} else if (num < 100){
System.out.println("100 미만");
} else {
System.out.println("100이상");
}

}

}
if 문에서부터 조건을 검사하면서 내려온다. 조건이 true인 부분을 만나면 해당 부분에 속한 문장을 실행, 나머지는 건너 뛴다. True를 만나지 못한다면 else에 속한 문장을 실행

if ~ else if ~ else = if ~ else문을 중첩 시킨 결과

<문제> 
1.
public class Main3 {
    public static void main(String[] args) {
        int num = 120;
        if (num > 0 && num % 2 == 0) {
            System.out.println("양수이면서 짝수");
        }
    }
}

if ~ else 문과 유사한 성격의 조건 연산자

public class Main4 {
    public static void main(String[] args) {
        int num1 = 50;
        int num2 = 100;
        int big;
        int diff;

        big = (num1 > num2) ? num1 : num2;
        System.out.println("큰수:" + big);

        diff =(num1 > num2) ? (num1 - num2) : (num2 - num1);
        System.out.println("절대값 :" + diff);
    }
}

조건 연산자는 피연산자가 3개
조건 ? 수1(true) : 수2(false)
기호 ?의 왼편이 true -> 왼편
기호 ?의 왼편이 false -> 오른쪽

<문제>
2. 
public class Main5 {
    public static void main(String[] args) {
        int num1 = 50;
        int num2 = 100;
        int big, diff;

        if (num1 > num2) {
            big = num1;
        } else {
            big = num2;
        }
        System.out.println(big);

        if (num1 > num2){
            diff = num1 - num2;
        } else {
            diff = num2 - num1;
        }
        System.out.println(diff);
    }
}

Switch와 break
switch문의 기본 구성
switch 문은 switch, case 그리고 default로 이루어 진다.
Switch (n){
Case 1 : n이 1이면 여기서부터 실행
Case 2 : n이 2면 실행
Default : 해당 case X면 여기서 실행

public class Main6 {
    public static void main(String[] args) {
        int n = 3;

        switch (n){
            case 1:
                System.out.println("심플자바");
            case 2:
                System.out.println("퍼니자바");
            case 3:
                System.out.println("판타스틱 자바");
            default:
                System.out.println("최고 언어");
        }

        System.out.println("자바 좋아하니?");
    }
}

실행할 위치가 결정되면 레이블의 의미는 없어진다. 즉, default를 포함하여 모든 레이블이 사라진 상태에서 실행

Switch문 들여쓰기
Case와 default는 레이블이다. 즉 들여쓰기 대상에서 제외

Switch문 + break 문
자바 키워드 중에 break가 있다.
Switch 문 밖으로 빠져나가겠습니다.
Switch (n){
Case 1 : n이 1이면 여기서부터 실행
Break;
Case 2 : n이 2면 실행
Break;
Default : 해당 case X면 여기서 실행
}

레이블 별로 영역을 형성하여 해당 영역만 실행 & break문 만났을 때 해당 영역을 빠져나감

public class Main7 {
    public static void main(String[] args) {
        int n = 3;

        switch (n) {
            case 1:
                System.out.println("simple Java");
                break;
            case 2:
                System.out.println("Funny Java");
                break;
            case 3:
                System.out.println("Fantastic Java");
                break;
            default:
                System.out.println("The Best Programming language");

        }

        System.out.println("Do u like Java");
    }
}
  • 한가지 특성을 더 하자면, 둘 이상의 레이블을 이어서 둘 수도 있다.
    switch (n) {
    case 1:
    case 2:
    case 3:
    System.out.println("Fantastic Java");
    break;
    default:
    System.out.println("The Best Programming language");

}
case 1,2,3인 경우에 실행 되는 영역이 같아짐

For, While & do~while
반복문 – while

public class Main10 {
    public static void main(String[] args) {
        int num = 0;

        while (num < 5){
            System.out.println("I like Java" + num);
            num++;
        }
    }
}

while(n<5) 반복조건 {
반복영역
}
소괄호에는 반복 조건을 명시 -> true, false
True를 반환하는 동안 횟수에 상관없이 while문 중괄호 반복 실행
 먼저 조건 검사
 결과가 true 이면 중괄호 영역 실행
처음부터 false 이면 while문 중괄호 실행 안될 수도 있다. 하지만 true만 반환하도록 구성 된다면,
While 문을 벗어나지 못 할 수도 있다.
그리고 중괄호도 반복 실행할 문장이 하나라면 생략 가능

Do ~ While 문
Do ~ While 문 다음의 페턴으로 반복할 진행함을 실행
 중괄호 영역 우선 실행
 조건 검사 후 결과가 true이면 반복 결정
While 문은 선 검사, do While 문은 후 검사

public class Main11 {
    public static void main(String[] args) {
        int num = 0;

        do {
            System.out.println("I like java" + num);
            num ++;
        } while (num<5);
    }
}

do {
반복 영역
} while(조건)
조건에 따른 반복이 필요하다. 그렇다면 한번은 무조건 실행
<문제>

1.
public class Main12 {
    public static void main(String[] args) {
        int num = 1;
        int result = 0;

        while (num < 100) {
            result += num;
            num ++;
        }
        System.out.println(num);
    }
}
2.
public class Main13 {
    public static void main(String[] args) {
        int num = 1;

        while (num < 100){
            System.out.println(num + "");
            num ++;
        }

        System.out.println(num);

        do {
            System.out.println(num + " ");
            num--;
        } while (num>1);
    }
}

3.
public class Main14 {
    public static void main(String[] args) {
        int num = 1;
        int answer = 0;

        while (num <= 1000) {
            if((num % 2 == 0) && (num % 7 == 0)){
                System.out.print(num);
                answer += num;
            }
        }

        System.out.println(answer);
    }
}

반복문 for
반복 횟수가 정해져 있는 상황에서는 for문을 이용해서 작성
for( int num = 0 ( 1 ); num <5 ( 2 ); num ++ ( 3 )){
System.out.println( num ); ( 4 )
}
Int num -> 반복 횟수를 세기 위한 변수
num < 5 -> 반복 조건
num++ -> 반복 조건을 무너뜨리기 위한 연산
public class Main15 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("I Love Java" + i);
}
}
}

for 문의 실행 흐름
첫 번째 루프 흐름 ( i = 0)
1 -> 2 -> 3 -> 4
두번쨰 루프 흐름 ( i = 1 )
2 -> 3 -> 4
3번째 루프 ( i = 2 )
2 -> 3 -> 4
4번째 루프 ( i = 3 )
2 -> 3 -> 4
첫 번째 실행이 완료되기 까지의 과정
1. 변수 선언 및 초기화
2. 반복 조건이 true 인지 확인
3. 반복 영역을 실행
4. 변수의 값 증가
두 번째 이후의 실행 과정
1. 반복 조건이 true
2. 반복 영역을 실행 (반복 조건이 true이면)
3. 변수 값 증가
이러다 false가 되면 반복문 빠져 나온다.
<문제>
1.
public class Main16 {
public static void main(String[] args) {
int num = 1;
for (int i = 1; i <11 ; i++) {
num *= i;

        System.out.println(num);
    }
}

}

  1. public class Main17 {
    public static void main(String[] args) {
    int a = 5;
    int b = 1;

        for (b = 1; b <10 ; b++) {
            System.out.println(a * b);
        }
    }

    }

Break & Continue
break문
반복문을 빠져나가는 용도로 사용
public class Main20 {
public static void main(String[] args) {
int num = 1;

    while (true) {
        if (num % 6 == 0 && num % 14 == 0)
            break;
        num++;
    }
    System.out.println(num);
}

}
break문이 실행되면 반복문 하나 빠져나간다. (가장 근접한 반복문을 찾아 하나 빠져나간다)

Continue 문
실행하던 반복문의 나머지 부분을 생략하고, 프로그램의 흐름을 조건 검사 부분으로 이동
Continue 문을 만나면, 반복문의 나머지 부분을 실행하지 않고, 반복문의 맨 위로 이동하여 조건 검사부터 실행을 이어나간다.
public class Main21 {
public static void main(String[] args) {
int num = 0;
int cnt = 0;

    for (num = 1; num <= 100; num++) {
        if (num % 7 == 0 && num % 5 == 0) {
            System.out.print(num + " ");
            cnt++;
        } else {
            continue;
        }
        System.out.println(cnt);
    }
}

}

무한 루프와 Break
반복의 조건이 true로 명시되어 해당 반복문을 빠져나가지 못하도록 구성한 반복문 -> 무한 루프
int num = 1;
while (true){
if ((num % 6) == 0 && (num % 14) == 0)
break;
num ++;
}

System.out.println(num);

}
값의 범위를 설정 하지 않았기에 무한 루프 형성

<문제>
1.
public class Main21 {
public static void main(String[] args) {
int num = 0;
int cnt = 0;

    for (num = 1; num <= 100; num++) {
        if (num % 7 == 0 && num % 5 == 0) {
            System.out.print(num + " ");
            cnt++;
        } else {
            continue;
        }
        System.out.println(cnt);
    }
}

}

  1. public class Main22 {
    public static void main(String[] args) {
    int n = 1;
    int cnt = 0;

        while (n < 1000) {
            if (n % 2 == 0) {
                n++;
            } else {
                cnt += n;
                n++;
            }
        }
    
        System.out.println(n - 1);
        System.out.println(cnt);
    
    }

    }

반복문 중첩
For문 안에 if문을 삽입하는 경우 & for문 안에 while 문도, do ~ while문도 그리고 for 문도 삽입
1. For 문의 중첩
2. public class Main23 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.println();
for (int j = 0; j <3; j++) {
System.out.print(i + j);
}

        System.out.println('\n');
    }
}

}
첫 for 문은 -> 바깥쪽 for문 / 두번째 for문은 안쪽 for 문

구구단 출력
public class Main24 {
public static void main(String[] args) {
for (int i = 2; i <10 ; i++) {
for (int j = 1; j <10 ; j++) {
System.out.println(i + "x" + "" + j + "=" + i*j);
}
}
}
}

While문 중첩
public class Main25 {
public static void main(String[] args) {
int i = 2;
int j;

    while (i < 10) {
        j = 1;
        while (j < 10) {
            System.out.println(i + "x" + "" + j + "=" + i * j);
            j++;
        }
        i++;
    }
}

}

for문 중첩을 우선으로 생각

중첩된 반복문을 한번에 빠져나오는 방법 -> 레이블을 설정하는 break
public class Main26 {
public static void main(String[] args) {
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (i j == 72){
System.out.println(i + "x" + "" + j + "=" + i
j);
break;
}
}
}
}
}
이렇게 되면, 안쪽 for문은 탈출이지만, 바깥쪽 for문은 계속 돌아간다.
바깥쪽 for 문까지 빠져나오려면, outer 설정
public class Main27 {
public static void main(String[] args) {
outer :for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (i j == 72){
System.out.println(i + "x" + "" + j + "=" + i
j);
break outer;
}
}
}
}
}

<문제>
1.
public class Main28 {
public static void main(String[] args) {
for (int i = 2; i <9 ; i+=2) {
for (int j = 1; j <9 ; j++) {
if (i == 2 && j <=2){
System.out.println(i * j);
}

            if (i == 4 && j <=4){
                System.out.println(i * j);
            }

            if (i ==6 && j <=6){
                System.out.println(i * j);
            }
        }
    }
}

}

  1. public class Main29 {
    public static void main(String[] args) {
    for (int a = 0; a < 10; a++) {
    for (int b = 0; b < 10; b++) {
    if ((10 a + b) + (10 b + a) == 99) {
    System.out.println("A =" + a + "B =" + b);
    }
    }
    }
    }
    }
profile
개발자를 향해 가는 중입니다~! 항상 겸손

0개의 댓글