📝 TIL

[TIL] Java 조건문, 반복문, break, continue

오늘 ONEUL 2022. 11. 10. 20:41

✍ Today I Learned

 

  • 예제 문제를 풀어보면서 제어문은 하나의 답이 아닌 여러 방향이 있다는 걸 또 한번 깨달았다.
  • 항상 효율적인 방향이 무엇인지 고민하고 코드를 구현하자!

 


 

04 조건문과 반복문

04-1 조건문: if문, switch문

조건문의 종류

  • if문
    • 조건식의 결과가 true, false이냐에 따라 실행문 결정
    • 주로 else 블록과 함께 사용
  • switch문
    • 변수의 값에 따라 실행문 결정
    • default는 생략 가능
    • break가 없다면 다음 case 연달아 실행
    • switch 연산은 char 타입, String 타입도 가능하다

 

중괄호 {} 블록

  • 여러 개의 실행문을 하나로 묶기 위해 중괄호 {} 사용
  • 조건식이 true가 될 때 실행해야 할 문장이 하나밖에 없다면 생략 가능
  • 그러나 코드의 가독성을 고려하여 작성하는 것을 추천
if (조건식) {
	실행문;
	실행문;
	...
}
// 중괄호 생략 가능하나 비추천
if (조건식)
	실행문;

 

정수 무작위수(난수) 출력 방법

  • Math.random() 메서드 활용
    • 0.0과 1.0 사이에 속하는 double 타입의 난수를 하나 리턴
    • 0.0은 포함, 1.0은 미포함
  • 각 변에 10을 곱하여 다음과 같은 범위의 double 타입 값을 얻는다.
0.0 * 10 <= Math.random() * 10 < 1.0 * 10
  • 각 변을 int 타입으로 강제 타입 변환하여 하나의 정수 값을 얻는다.
(int)0.0 <= (int)(Math.random() * 10) < (int)10.0
  • 각 변에 1을 더하여 1~10 사이의 범위에서 하나의 정수 값을 얻는다.
0 + 1 <= (int)(Math.random() * 10) + 1 < 10 + 1
  • 이 원리를 이용하여 start부터 시작하는 n개의 정수 중에서 임의의 정수 하나를 얻는 연산식을 만들 수 있다.
int num = (int)(Math.random() * n) + start;
  • 예를 들어 주사위 번호 하나 뽑기를 한다면?
int num = (int)(Math.random() * 6) + 1;

 

 

 

04-2 반복문: for문, while문, do-while문

반복문의 종류

  • for문
    • 반복 횟수를 알고 있을 때 주로 사용
  • while문
    • 조건에 따라 반복할 때 주로 사용
  • do-while문
    • while문과의 차이점은 조건을 먼저 검사하느냐 나중에 검사하느냐 차이

 

for문의 초기화식이 둘 이상인 경우

  • 초기화식, 증감식 모두 둘 이상 있을 수 있다.
  • 다음과 같이 쉼표로 구분해서 작성한다.
for (int i=0, j=100; i<=50 && j>=50; i++, j-- { ... }

 

for문 안의 변수

  • 초기화식에 선언된 변수는 for문 블록 내부에서 사용되는 로컬 변수이다.
  • for문을 벗어나서 사용할 수 없다.
  • 변수 i를 초기화식에서 선언하지 않고 for문 전에 선언하면 for문 외부에서도 사용할 수 있다.

 

for문에서 주의할 점

  • 초기화식에서 루프 카운터 변수를 선언할 때 부동 소수점을 쓰는 float 타입은 사용하지 말아야 한다.
package chap04.sec02.exam04;

public class ForFloatCounterExample {
    public static void main(String[] args) {
        for (float x = 0.1f; x <=1.0f ; x+=0.1f) {
            System.out.println(x);
        }

        //x에 실제 더해지는 값은 0.1보다 약간 크기 때문에 9번만 실행
        //0.1
        //0.2
        //0.3
        //0.4
        //0.5
        //0.6
        //0.70000005
        //0.8000001
        //0.9000001
    }
}

 

중첩 for문으로 구구단 출력하기

package chap04.sec02.exam05;

public class ForMultiplicationTableExample {
    public static void main(String[] args) {
        for (int m=2; m<=9; m++){
            System.out.println("*** " + m + "단 ***");
            for (int n = 1; n <= 9; n++) {
                System.out.println(m + " x " + n + " = " + (m*n));
            }
        }
    }
}

 

break문

  • 대개 if문과 같이 사용되어 if문의 조건식에 따라 반복문의 실행을 종료할 때 사용
  • 가장 가까운 반복문만 종료
  • 중첩된 반복문에서 바깥 반복문까지 종료시키려면 바깥쪽 반복문에 이름(라벨)을 붙이고, ‘break 이름;’을 사용
package chap04.sec02.exam09;

// 중첩된 for문에서 lower 변수가 'g'를 갖ㅈ게 되면 바깥쪽 for문 break
public class BreakOutterExample {
    public static void main(String[] args) {
        Outter:for (char upper='A'; upper<='Z' ; upper++) {
            for (char lower='a'; lower<='z'; lower++) {
                System.out.println(upper + "-" + lower);
                if (lower == 'g') {
                    break Outter;
                }
            }

        }
        System.out.println("프로그램 실행 종료");
    }
}

 

continue문

  • 반복문인 for문, while문, do-while문에서 continue문이 실행되면 for문의 증감식 또는 while문, do-while문의 조건식으로 이동
  • 마찬가지로 대개 if문과 사용되는데, 특정 조건을 만족하는 경우 continue문을 실행해서 그 이후 문장을 실행하지 않고 다음 반복으로 이동
package chap04.sec02.exam10;

// 1에서 10사이의 수 중에서 짝수만 출력
public class ContinueExample {
    public static void main(String[] args) {
        for (int i = 1; i <=10; i++) {
            if (i%2 != 0) {
                continue;
            }
            System.out.println(i);

        }
    }
}

 

 

 

※ 이 내용은 책 [혼자 공부하는 자바]를 보고 정리한 내용입니다.