Lang/Java

4. 제어문

진욱 김 2023. 3. 27. 17:28
728x90
반응형

1. 조건문

  • 조건의 진위 여부에 따라 명령의 실행 여부를 결정하는 문장
  • 특정 조건이 만족될 때에만 실행하고 싶은 경우 사용

    a. if문

    1) 기본 if문

    if(조건식){
    문장;
    }

  • 조건을 만족하면 문장을 실행하고, 다음 라인을 수행한다.
  • if문의 조건을 만족하지 않으면 수행을 한번도 하지 않는다.
import java.util.*;
class If{
  public static void main(String[] args){

    System.out.println("숫자 1을 입력하세요");

    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    if (num==1){
      System.out.println("맞았습니다.");
    }
  }
}

2) if~else문

if(조건식){
문장1;
}else{
문장2;
}

  • 조건을 만족하면 문장1을 수행
  • 조건을 만족하지 않으면 문장 2 수행
import java.util.*;
class If{
  public static void main(String[] args){

    System.out.println("숫자 1을 입력하세요");

    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    if (num==1){
      System.out.println("맞았습니다.");
    }else{
      System.out.println("틀렸습니다.");
    }
  }
}

3) 다중if문

if(조건1){
문장1;
}else if(조건2){
문장2;
}else{
문장3;
}

  • 조건1이 참이면 문장 1 수행
  • 조건1이 거짓이면 조건2와 비교
  • 조건2 참이면 문장 2 수행
  • 조건2 거짓이면 문장3 수행
  • else if를 추가하여 조건을 추가할 수 있다.
import java.util.*;
class If{
  public static void main(String[] args){

    System.out.println("숫자를 입력하세요");

    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    if (num>0){
      System.out.println("양수");
    }else if (num==0){
      System.out.println("0");
    }else{
      System.out.println("음수");
    }
  }
}

4) 중첩if문

if(조건문){
if(조건문){
문장1;
}
}

  • 바깥쪽 if문이 참일 때 안쪽 if문을 수행한다.
import java.util.*;
class If{
  public static void main(String[] args){

    System.out.println("회원여부를 입력하세요 (1. 회원, 2. 비회원");
    Scanner sc = new Scanner(System.in);

    int mem = sc.nextInt();
    if (mem==1){
      System.out.printlnt("구매금액을 입력사헤요")
      int amount = sc.nextInt();
      if(amount >= 10000){
        System.out.println("만원 이상 구매 회원");
      }else{
        System.out.println("만원 이하 구매 회원");
      }
    }else{
      System.out.println("비회원");
    }
  }
}

b. switch문

switch(제어 변수){
case 값1 :
실행블록1;
break;
case 값2 :
실행블록2;
break;
default:
실행블록 default 처리;
break;
}

  • 여러 개의 case 구문을 사용하여 여러 조건 처리
  • case 다음에는 상수만 쓸 수 있다.
  • 제어변수 : byte,short,int,char 자료형의 값을 나타낼 수 있는 필드나 식
  • case 문 안에 있는 코드는 모두 한 묶음으로 {}로 블록을 묶을 필요는 없다.
  • 묶음의 끝을 표시하기 위해 break문이 있어야 한다.

case1:
case2:
case3:
실행구문
break;

  • case문을 비움으로 여러개의 case를 or로 연결할 수 있다.
  • case만 써두고 명령을 비워두면 아래쪽 case의 명령을 실행한다.
import java.util.*;
class If{
  public static void main(String[] args){

    System.out.println("숫자를 입력하세요");

    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    switch(num){
      case 1:
        System.out.println("one");
        break;
      case 2:
        System.out.println("two");
        break;
      default:
        System.out.println("그 외 숫자");
        break;
      }
  }
}

2. 반복문

a. for 문

  • 지정된 횟수만큼 반복해서 실행하는 구문
  • 시작값, 최종값, 증가값을 설정하여 반복적인 수행을 한다.

1) for문 기본

for(초기식;조건식;증감식){
반복명령;
}

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

  • 시작과 동시에 초기식을 실행, i의 시작값을 확인한다.
  • 조건식과 비교하여 만족한다면 명령을 실행한다.
  • 증감식을 통해 i의 값을 변환한다.
  • 조건식과 비교하는 루프를 돌린다
class For{
  public static void main(String[] args){
    for(int=0; i<3; i++){             //0hi
      System.out.println(i+"hi");     //1hi
    }                                 //2hi
  }
}

2) for 문 활용 누적

class For{
    public static void main(String[] arge){
        int sum = 0;
        for(int i=1; i<=3; i++){
            sum += i;
            System.out.println("i="+i+", sum="+sum);
        }
        System.out.println("1~3까지의 합 : " +sum);
    }
}

3) 중첩 for문

public class ForOverlap {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for(int i=0; i<3; i++){
            System.out.println("=====현재 i : "+i);        
            for(int j=0;j<2;j++) {
                System.out.println("현재 j : "+j);
            }//안for
        }//밖for
    }
}

4) for 무한루프

  • 조건식을 생략하면 무한루프
  • for(;;)
  • 빠져나올 때는 break문 사용
public class ForLoop {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);

        for(;;) {
            System.out.println("진행중");
            System.out.println("계속하시겠습니까 Y/N");
            String q = sc.nextLine();
            if(q.equals("N")) {
                sc.close();
                break;
            }
        }
    }
}

5) Enhanced for문(확장 for문)

  • 일정한 개수로 구성된 특정 집합의 요소들을 반복 처리 할 때 사용

  • 배열의 모든 요소를 순회할 때

  • 배열 또는 컬렉션(해시, 리스트 등)에 있는 데이터만큼 반복

    for(타입 변수 : 배열){
    명령문;
    }

    > int[] number={10,20,30,40};   
    > for(int n : number){   
    > System.out.println(n);   
    > }   
       - 제어변수 n 은 읽기 전용, 반복문 내에서 n의 값을 변경할 수 없다.
 class ForeachTest{
    public static void main(String[] args) {
        int[] num= {12, 43, 64, 56, 32};
        for (int n : num) {
            System.out.println(n);
        } // 배열 수만큼 반복, 12, 43, 64, 56, 32 출력
    } //main
} //class
String[] hobby= {"movie", "reading", "sports"};
    for (String s : hobby){
        System.out.println(s);
    }
 // movie, reading, sports 출력

b. while문

  • 특정 조건을 주고, 조건이 참인 동안에는 계속 반복
  • 반복 횟수가 가변적인 처리에 적합
  • while 내부 문장에서 조건이 거짓이 되도록 만들어 루프를 빠져나오게 해야한다.

1) while문 기본

초기값;
while(조건식){
명령문;
증감식;
}

class WhileTest{
    public static void main(String[] args){
    int n=1; // 초기식
    while(n<3){ // 조건식
        System.out.println(n); // 명령
        n++; // 증감식
    }
}

2) while 무한루프

-조건식에 true를 넣어주면 무한루프가 된다.

while(true){}

import java.util.Scanner;
public class WhileLoop {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.println("양수입력!");
            int n = sc.nextInt();
            String rst = "";

            if (n>0) {
                rst = "양수";
            }else {
                rst = "음수";
            }
            System.out.println(rst+"\n");
        }
    }
}
  • 무한루프를 끝내기 위해서는 break문이 필요하다.
import java.util.Scanner;
public class WhileLoop {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.println("정수입력! : 0이면 종료");
            int n = sc.nextInt();
            String rst = "";

            if (n==0) break;

            if (n>0) {
                rst = "양수";
            }else {
                rst = "음수";
            }
            System.out.println(rst+"\n");            
        }
    }
}

3) do-while문

do{
명령문;
증감식;
}while(조건식);

  • 조건보다 명령이 먼저온다.
  • 선 실행 후 조건 처리
  • 조건이 거짓이라도 실행구문을 최소 한번은 수행한다.
public class DoWhile {
    public static void main(String[] args) {
        int k=0;
        do {
            System.out.println(k);
            k++;
        }while(k<0);
    } // 조건에 맞지 않아도 0이 출력되는 것을 볼 수 있다.
}

3. 분기문

a. break

  • 반복문이나 switch문의 case를 벗어날 때 사용
  • 무한루프를 사용할 때 종종 사용
public class Break {

    public static void main(String[] args) {

        for(int i=1;i<=10;i++) {
            if(i==5) break;
            System.out.print(i);
        }
    }

}
  • 결과 : 1234
public class Break {
    public static void main(String[] args) {
        for(int i=0;i<3;i++) {
            for(int j=0;j<3;j++) {
                if(j==1) break;
                System.out.println("i="+i+", j="+j);
            }
        }
    }

}
  • 결과

    i=0, j=0
    i=1, j=0
    i=2, j=0

b. continue

  • 루프의 나머지 뒷 부분을 무시하고 반복문의 선두로 점프하여 루프를 실행
    • 다음 스텝으로 넘어간다
    • 다음 반복위치로 이동한다
    • 루프에서 특정 값에 대한 처리를 제외할 때 사용한다
public class Continue {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for(int i=1;i<=10;i++) {
            if(i==5) continue;
            System.out.print(i);
        }
    }
}
  • 결과 : 1234678910
public class Continue {
    public static void main(String[] args) {
        for(int i=0;i<3;i++) {
            for(int j=0;j<3;j++) {
                if(j==1) continue;
                System.out.println("i="+i+", j="+j);
            }
        }
    }
}
  • 결과

    i=0, j=0
    i=0, j=2
    i=1, j=0
    i=1, j=2
    i=2, j=0
    i=2, j=2

c. return

  • 메서드의 실행을 종료하고 호출원으로 복귀한다
  • 메서드의 처리결과를 호출원으로 돌려주는 기능도 한다.

4. 라벨

  • 여러 반복문이 중첩되어 있을 때
  • 반복문 앞에 이름을 붙이고(Label)
  • break문과 continue문에 이름을 지정함으로써
  • 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다.

Loop1 : for(int i=0; j<3; i++)

public class ContinueTest2 {
    public static void main(String[] args) {
        Loop1: for(int i=0; i<3; i++) {
            for(int j=0; j<3; j++) {
                if(j==1) {
                    break Loop1;
                }
                System.out.println("i="+i+", j="+j);
            }
        }    
    }
}
  • 결과 : i=0, j=0
public class ContinueTest2 {
    public static void main(String[] args) {
        Loop1: for(int i=0; i<3; i++) {
            for(int j=0; j<3; j++) {
                if(j==1) {
                    continue Loop1;
                }
                System.out.println("i="+i+", j="+j);
            }
        }        
    }
}
  • 결과

    i=0, j=0
    i=1, j=0
    i=2, j=0

728x90
반응형