Java의 정석 - 조건문과 반복문

원태연·2022년 5월 30일
0

Java의 정석

목록 보기
5/19
post-thumbnail

조건문

if 문

구문 : if (조건) {조건이 참이면 수행할 문장} else if() {} else{}

Switch

if처럼 조건식을 처리하지만, 경우의 수가 많아질 경우 유용하게 사용할 수 있다.

switch (조건식){
  case1:
  case2:
  case3:
    break;
    ...
  default:
}

switch문의 작동

  1. 조건식을 계산한다.
  2. 조건식의 결과와 일치하는 case로 이동한다
  3. case의 문장을 수행한다
  4. break나 switch문의 끝을 만나면 빠져나간다.

조건식을 받고, 그 값이 case 값에 해당하는 구문으로 이동한다. 그 후 break를 만날 때 까지 수행한다.

int level = 2;
switch (level) {
    
  case 10: case 20:
    System.out.println("admin");
  case 0:
    System.out.println("Level 0");
  case 3:
    System.out.println("get relocate permission");
  case 2:
    System.out.println("get enter permission");
  case 1:
    System.out.println("get submit permission");
  case -1:
    System.out.println("break required");
}

//get enter permission
//get submit permission
//break required

level의 값이 2이므로 case 2:구문을 수행한다. 하지만 break;가 존재하지 않아 switch문의 끝까지 수행된다.

위 예시처럼 switch의 작동 방식을 활용하여 유연하게 구현이 가능하다. 또, case를 묶어서 지정할 수 있다.

switch문의 제약조건

주의할 점은, if문과 다르게

  • switch문의 조건식의 결과는 정수 또는 문자열

  • case문의 값은 정수 상수만 가능.

int num;
int a = 10;
final B = 20;
switch (num){
//  case 1.0: ERROR 정수만 가능
//  case a: ERROR   변수는 불가
  case B:					//정수, 상수는 가능
  case '1':       //문자 리터럴 가능 ('1' => 49 정수 상수)
}

Switch문은 if와는 다르게 해당 조건식이 한 번만 계산된다. 처리하는 조건에 따라 가독성과 성능을 고려하여 유연하게 사용하자.

반복문

for

for(초기화; 조건식; 증감식) {}

for (int i = 1; i <= 3; i++) { System.out.println(i) }
// 1
// 2
// 3

for (int i = 1, j = 3; i <= 3; i++, j--) {
  System.out.printf("%d %d %n", i, j);
}
// 1 3
// 2 2
// 3 1

향상된 for 문

#python
arr = [1,2,3,4]
for i in arr:
  print(i, end=", ")
#1, 2, 3, 4

이처럼 문자열이나 배열, 컬렉션에 저장된 요소에 접근하는 방법이 존재한다.

//기본적인 for문
int[] arr = { 1, 2, 3, 4 };
for (int i = 0; i < arr.length; i++) {
  System.out.printf("%d ", arr[i]);
} //1 2 3 4

//향상된 for문
for (int i : arr) {
  System.out.printf("%d ", i);
} //1 2 3 4

항상 유용한건 아니지만, 배열이나 문자열에 접근할 때 유용하게 사용할 수 있다.

while

while (조건식) {수행 문장}

조건식이 참인 동안 수행. 주의할 점은, 수행이 되고 나서 조건식을 계산한다.

do while

while문의 변형으로, 수행을 한 뒤 조건식을 계산한다.

최소한 한 번의 수행은 이루어 진다.

int i = 1;
do {
  System.out.println("i = " + i);
} while (i < 1);
// i = 1 출력

int j = 1;
while (j < 1) {
  System.out.println("j = " + j);
} //아무것도 출력 되지 않음

이러한 순서 차이는, 사용자의 입력을 처리할 경우 유용하게 사용된다.

break, continue

  • break : 근접한 하나의 반복문 종료
  • continue : 반복문의 끝으로 이동

break는 하나의 반복문만 종료한다는 점을 유의하자.

for (int i = 0; i < 5; i++) {
  for (int j = 0; j < 5; j++) {
    if (j == 0) {
      System.out.printf("i = %d, j = %d%n", i,j);
      break;
    }
  }
}
/*
i = 0, j = 0
i = 1, j = 0
i = 2, j = 0
i = 3, j = 0
i = 4, j = 0
*/

반복문 이름 붙히기

break를 통해 근접한 반복문이 아닌 다른 반복문을 멈추고 싶으면, 그 반복문에 이름을 붙혀 지정할 수 있다.

  • "name" :을 통해 가능하다.
Loop1: for (int i = 0; i < 5; i++) {
  for (int j = 0; j < 5; j++) {
    System.out.printf("i = %d, j = %d%n", i, j);
    if (j == 3) {
      break Loop1;
    }
  }
  System.out.println(i);
}
/*
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 0, j = 3
*/
profile
앞으로 넘어지기

0개의 댓글