티스토리 뷰

BackEnd/JAVA

[Ch.04] 조건문과 반복문

JINSUKUKU 2021. 3. 5. 01:30

📌 조건문 

조건식과 문장을 포함하는 {블록}으로 구성되어 있으며, 조건식의 연산 결과에 따라 실행문이 달라져 프로그램의 실행 흐름을 변경할 수 있다. 조건식의 결과는 반드시 참이나 거짓 이어야 한다. 조건문 마지막에는 세미콜론을 붙이지 않으니 주의하자.

 

👉  if 문

1. if 문

if (조건식) {
  // 조건식이 참일 때 실행될 문장
}

✔  조건식이 참이라면, if문 내부의 명령문이 실행.

✔  조건식이 거짓이라면, if문 내부의 명령문이 실행되지 않고 다음 명령문으로 이동한다.

 

2. if-else문

if (조건식) {
  // 조건식이 참일 때 실행될 문장
}else {
  // 조건식이 거짓인 경우 실행될 문장
}

✔  조건식이 참이라면, if문 내부의 명령문이 실행.

✔  조건식이 거짓이라면, if문 내부의 명령문이 실행되지 않고 다음 명령문인 else문으로 이동한다.

✔  else문은 앞서 확인한 조건식이 거짓일 때 실행된다.

 

3. if-else if문

if (조건식A) {
  // 조건식A가 참일 때 실행될 문장
} else if (조건식B) {
  // 조건식B가 참일 때 실행될 문장
} else {
  // 조건식A와 B가 모두 거짓일 때 실행될 문장
}

✔  여러 조건을 확인해야 할 때 if-else if문을 사용한다

✔  조건식 A가 참이면 if문 내부의 명령문이 실행되고, 거짓이면 다음 명령문인 else if문으로 이동한다.

✔  조건문 B가 참이면 else if문 내부의 명령문이 실행되고, 거짓이면 다음 명령문인 else문으로 이동한다.

✔  else문은 앞서 확인한 조건식이 모두 거짓일 때 실행되므로, else문 내부의 명령문이 실행된다.

 

4. 중첩 if문

if(age<20){
  if(age<8){
    System.out.println("어린이");    
  }else if(age<13){
    System.out.println("초등학생");
  }else if(age<17){
    System.out.println("중학생");
  }else{
    System.out.println("고등학생");
  }
}

✔  if문 안에 또 다른 if문을 포함시킬 수 있는데, 이를 중첩 if문이라고 한다.

✔  선행 조건을 확인해야 하는 경우 자주 사용되며, 여러 명령문이 중첩되어 있으므로 들여 쓰기에 주의해야 한다.

 

👉  switch 문

int i=4;
switch(i) {
  case 1: 실행문1 break;   
  case 2: 실행문2 break;
  case 3: 실행문3 break;
  default: 실행문;
}

✔  조건의 결과가 참과 거짓 둘 뿐인 if문과 달리, switch문은 여러 가지 경우들을 대비할 수 있다.

✔ switch문은 조건식을 확인해, 조건식의 결과와 일치하는 case문으로 이동해 해당 명령문을 수행한다.

✔ 만약 조건식과 결과가 일치하는 case문이 없는 경우, default문의 명령문을 수행한다.

✔ break문이나 swtich문의 끝을 만나면 switch문을 빠져나간다.

 case문의 명령문 뒤에 break문이 없으면 일치하는 조건을 찾았어도 이후의 명령문을 계속 수행하므로 주의하자.

int month = 12;
switch(month) {
  case 1: case 3: case 5: case 7: case 8: case 10: case 12:
  	System.out.println("31일");
    break;
  case 2:
  	System.out.println("28일");
  default:
  	System.out.println("30일");
}

 case문의 명령문 뒤에 break문이 없으면 일치하는 조건을 찾았어도

✔  이후의 명령문을 계속 수행은 성질을 이용해 여러 조건에 같은 명령문을 정해줄 수 있다.

 

 


📌 반복문 

반복문은 어떠한 작업이 반복적으로 수행되도록 해야 할 때 사용되며, 반복문의 종류로는 for문과 while문, do-while문이 있다. 조건문과 마찬가지로 조건식의 결과가 참이거나 거짓이어야 하며, 조건이 거짓이 될 때까지 {블록} 내부의 명령문을 반복 실행한다. 조건식을 항상 true로 하여 무한 반복을 의도하여 사용하기도 한다. 

 

👉  for 문

1. for문

for(초기식; 조건식; 증감식){
  //조건식의 결과가 true인 경우 반복 실행할 명령문
}

✔  반복 횟수를 알고 있을 때 적합하다. 

✔  먼저 초기화가 실행되고, 조건의 결과가 참이라면 {블록} 내부로 이동하여 명령문이 실행된다.

✔  {블록}의 마지막 명령문까지 실행한 뒤, 증감식으로 이동해 초기값을 증가 또는 감소시킨다.

✔  그리고 다시 조건식으로 돌아가 조건의 결과를 확인한다.

✔  조건의 결과가 참인 경우 계속 반복하고, 거짓인 경우 for문을 빠져나간다.

 

2. 중첩 for문

for(int i=1; i<10; i++){
	for(int j=2; j<10; j++){
    	System.out.printf(j+"x"+i+"="+(j*i)+"\t");
    }System.out.println();
}

✔  중첩 for문을 사용하면 행과 열을 구분해서 사용해야 하는 경우나 변수가 2개 이상 필요한 경우를 대응할 수 있다.

 

3. 향상된 for문

int[] arr = {10,20,30,40,50};

//일반 for문
for(int i=0; i<arr.length; i++){
  System.out.printf(arr[i]+"\t");
}

//향상된 for문
for( int i : arr){
  System.out.printf(i+"\t");
}

✔  배열에 저장된 값을 모두 출력하기 위해서는 배열의 길이만큼 반복하는 for문을 만들어 사용한다.

✔  JDK 1.5 부터는 일반 for문보다 더 향상된 성능의 for문을 사용할 수 있는데, 콜론 for문이다.

✔  콜론을 기준으로 좌항의 변수에 배열의 값을 순서대로 하나씩 대입하여 사용할 수 있다.

✔  콜론 for문은 배열의 값을 읽어올 수는 있지만, 배열에 저장된 값을 변경할 수 없으니 주의하자.

 

👉  while 문

1. while문

while(조건식){
  // 조건식의 연산결과가 참인 동안 반복할 문장
  // 증감식
}

✔  while문은 조건식의 결과가 거짓이면 반복을 벗어나고, 참이라면 명령문을 반복한다.

✔  조건식이 참일 때 반복한다는 점에서 for문과 비슷하지만, while문은 증감식이 {블록} 내부에 있다는 차이가 있다.

✔  그리고 초기식,조건식,증감식을 생략할 수 없는 for문과 달리, while문은 상황에 따라 증감식을 생략하기도 한다.

 

2. do-while문

do{
  // 조건식의 연산결과가 참인 동안 반복할 문장
  // 증감식
}while(조건식);

✔  다른 반복문은 조건을 확인하고 명령을 실행하지만 do-while문은 일단 실행한 뒤, 조건을 확인한다.

✔  그렇기 때문에 무조건 한번은 명령문을 실행한다.

 

3. 무한 반복

Scanner sc = new Scanner(System.in);
int num;
int sum=0;

while(true){
  num = sc.nextInt();
  if(num!=0) sum+=num;	//입력값이 0이 아니면 sum에 더한다
  else break;		//입력값이 0이면 무한 반복을 종료
}

System.out.println("합계 : "+sum);	//합계 출력

✔  while문은 조건식에 true를 넣어 손쉽게 무한 반복문을 만들 수 있다.

 

 

👉  break과 continue문

✔  break문은 가장 가까운 반복문에서 빠져나올 때 사용한다.

✔  continue문은 현재 진행 회차를 포기하고 다음 회차로 이동한다.

✔  continue문 이하의 명령문을 실행하지 않고 증감식을 실행한다.

public class Main {

  public static void main(String[] args) {		
    //Loop1
    Loop1:
    for(int i=1; i<=3; i++) {
      for(int j=1; j<=100; j++){
        System.out.println("i="+i+", j="+j);
        if(j==3) {break Loop1;} 
        //조건이 맞으면 바깥쪽 for문을 빠져나온다 (Loop1로 이동)
      }
    }
    System.out.println();

    //Loop2
    Loop2:
    for(int i=1; i<=3; i++) {
      for(int j=1; j<=100; j++){
        if(j==3) {continue Loop2;} 
        //하던 작업을 중단하고 외부for문의 증감식으로 이동 (Loop2로 이동)
        System.out.println("i="+i+", j="+j);
      }
    }
    System.out.println();

  }

}

✔  위와 같이 원하는 곳에 label을 추가해 label break문이나 label continue문을 사용할 수 있다.

✔  일반적으로 break문은 하나의 반복문을 빠져나가고, continue문은 하나의 반복 진행을 건너뛴다. 

✔  label을 붙여줌으로써 하나 이상의 반복을 벗어나거나 건너뛸 수 있다.

 

 

 

 

 

 

[참고] 자바의 정석

'BackEnd > JAVA' 카테고리의 다른 글

[Ch.05] 2. String 배열, 다차원 배열  (0) 2021.03.14
[Ch.05] 1. 배열  (0) 2021.03.11
[Ch.03] 5. 기타 연산자  (0) 2021.02.28
[Ch.03] 4. 비교 연산자/논리 연산자  (0) 2021.02.28
[Ch.03] 3. 산술 연산자  (0) 2021.02.28
댓글
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
최근에 올라온 글
글 보관함
Total
Today
Yesterday