본문 바로가기
☕ Java 웹 프로그래밍/Java

[프로그래머스] Java(자바) 입문 | Part 3. 제어문

by 일단연 2023. 4. 27.

 if문 

조건식의 연산 결과에 따라 블록 내부 문장의 실행 여부를 결정할 수 있음

  • if 문
    • 조건식이 true 일 경우에만 실행문이 실행됨
    • if(조건식) 다음의 { } 를 생략할 수 있음. 하지만, 생략할 경우 if문에 포함되는 실행문은 단 한 줄만 포함됨. ( ; 이후 바로 실행되기 때문)
if(조건식){
		실행문;
		실행문;
}
  • if - else 문
    • 조건식이 true일 경우 if 블록의 실행문이 실행되고, flase 일 경우 else 블록의 실행문이 실행됨
if(조건식){
실행문;
실행문;
}else{
실행문;
}
  • if - else if - else문
    • 처음 if문의 조건식의 조건문이 true일 경우 처음 if문의 블록이 실행되고, false일 경우 다음 조건식의 결과에 따라 실행 블록이 달라짐.
    • else if 문의 수는 제한이 없으나, 너무 많은 else if 문은 실행 속도를 느리게 함
    • 마지막 else 블록은 생략되도 상관없음

실습 1

실습 2


 

 논리연산자 

A와 B는 피연산자

  • 논리곱( &&, & ), 논리합( ||, | ), 배타적 논리합 ( ^ ), 논리부정( ! ) 연산을 수행
  • 논리연산자의 피연산자는 boolean 타입만 사용 가능하며, 결과 또한 boolean 값
boolean b1 = true;
boolean b2 = false;
boolean b3 = true;

  • 논리곱 ( &&, & ) - 이항연산자 / ‘ampersand’라 읽음
    • 피연산자가 모두 true일 경우에만 연산 결과가 true
      • System.out.println(b1 && b2); → b2가 false이므로 결과는 false
      • System.out.println(b1 && b3); → b1과 b2 모두 true이므로 결과는 true

  • 논리합 ( ||, | ) - 이항연산자 / ‘바바’라고 읽음
    • 피연산자 중 하나만 true면 연산 결과는 true
      • System.out.println(b1 || b2); → b1 이 true이므로 결과는 true
      • System.out.println(b1 || b2); → b1과 b2가 모두 false여야 결과가 false

  • 논리 부정 ( ! ) - 단항연산자 / ‘not’이라 읽음
    • 피연산자의 논리값을 바꿈 (true는 false로, false는 true로)
      • System.out.println(!b1); → b1이 true이므로 결과는 false
      • System.out.println(!b2); → b2이 false이므로 결과는 true

  • 배타적 논리합 ( ^ ) - 이항연산자 / ‘exclusive or’라 읽음
    • 피연산자가 서로 다른 값일 경우만 연산 결과가 true
      • System.out.println(b1 ^ b2); → b1은 true, b2는 false로 서로 다르니까, 결과는 true
      • System.out.println(b1 ^ b3); → b1, b3 모두 true로 서로 같으니까, 결과는false

 

실습 1

실습 2


 

 삼항연산자 

  • 형태
    • 조건식 ? 피연산자1 : 피연산자2
  • 결과
    • 조건식의 연산결과가 true > 결과는 피연산자 1
    • 조건식의 연산결과가 false > 결과는 피연산자2
    int b1 = (5>4) ? 50 : 40;
    *//조건식이 true이므로 b1은 50이 된다.*
    
    • 피연산자1, 피연산자2 에는 주로 값이 오지만, 경우에 따라 연산식이 올 수 있음
    • 삼항 연산자가 익숙하지 않다면, if문을 사용해도 좋음
int b2 = 0;
if(5 > 4){
	b2 = 50;
}else{
	b2 = 40;
}

 

실습


 

 switch문 

  • 어떤 변수의 값에 따라서 문장을 실행할 수 있도록 하는 제어문
  • switch문의 형태
    • switch문에서 사용하는 키워드는 switch, case, default, break
        switch(변수){
            case 값1 : // case는 if와 비슷한 역할
                실행문; 
                break;
            case 값2 : 
                실행문; 
                break;  
            default;   // default는 else와 비슷한 역할
        }
    
  • switch문의 예시
    int value = 1;

    switch(value){
        case 1: 
            System.out.println("1");
            break;
        case 2:
            System.out.println("2");
            break;
        case 3 :
            System.out.println("3");
            break;
        default :
            System.out.println("그 외의 숫자");
    }
  • value의 값이 1일 경우 1이 출력, 2일 경우는 2가 출력, 3일 경우는 3이 출력, 그 외에는 그 외의 숫자가 출력됨
    case 1: 
        System.out.println("1");
    case 2:
        System.out.println("2");
    case 3 :
        System.out.println("3");
    default :
        System.out.println("그 외의 숫자");
  • 위의 예시에서 break를 제거하면 value가 1일 경우 1이 출력된 후 switch문장을 빠져나가지 않고 1,2,3, 그 외의 숫자가 연속해서 실행됨 (모든 결과가 출력되는 것)
  • break문장이 있을 경우와 없을 경우를 확실하게 구분할 수 있어야 함

참고

  • JDK7 이전에는 switch 다음 괄호 안에 정수(int) 타입의 변수만 올 수 있었음
  • But, JDK7부터는 switch 다음 괄호 안에 문자열(String) 타입의 변수도 올 수 있음
    String str = "A";

    switch(str){
        case "A": 
            System.out.println("1");
        case "B":
            System.out.println("2");
        case "C" :
            System.out.println("3");
        default :
            System.out.println("그 외의 글자");
    }
  • 문자열의 값에 따라서 case 블록의 내용이 출력되는 것을 알 수 있음

 

실습

  • 어려웠던 점
    • month가 이미 선언되어 있는 걸 못 보고 int month;로 선언함
    • season에 계절 값만 넣어주면 되는데 자꾸 System.out.println( )로 출력하려 했음
    • case 1: case 2: case 3 이런 식으로 케이스를 한 번에 배치할 수 있는지 몰라서 월별로 케이스문을 다 썼음
    • 자꾸 한 문장 뒤에 ; 빠뜨렸음


 

 while문 

  • 반복문
    • 실행문을 반복적으로 실행해야 할 때 사용
  • 반복문의 종류
    • while문, do-while문, for문
  • while문의 형태
    • 조건문의 실행 결과가 true일 동안 반복해서 실행
    while(조건문){
        실행문; 
    }
  • while문 예시
    • 10번 반복하면서 0부터 9까지 출력하는 반복문
int i = 0;  // while에서 사용할 변수를 선언
while(i < 10){
	System.out.println(i);
	i++; // 조건문을 원하는 만큼만 반복하고 빠져나가기 위한 부분
	// i = i + 1;과 같음
}
  • 1부터 100까지의 합을 while문을 이용하여 구현
public class WhileExam2 {
	public static void main(String[] args) {
		int total = 0; // i의 값을 누적할 변수를 선언
		int i = 1;
		while(i <= 100){
				total = total + i;
				i++;
		}
	}
}

 

실습 1

실습 2

  • 어려웠던 점
    • 실행시간이 10초를 초과하여 실행이 중단되었습니다.’ 에러 메시지가 뜸
      • i++가 if문 안에 있으면 맨처음 i가 1일 때 if문 안으로 들어가지 못해서 i값이 증가되지 않아 실행 오류가 발생함
      • if문 바깥의 while문으로 옮김

 

 do while문 

  • 무조건 한 번은 실행되는 반복문 (do 블럭 안에 들어간 문장은 꼭 한 번은 실행됨)
  • cf) while문: 조건이 만족하지 않는다면 한번도 반복하지 않을 수 있음
    do{
        실행문; // do 블럭 안에 들어간 문장은 꼭 한 번은 실행됨
    }while(조건문); //while문으로 조건 설정
  • do-while 예시
    • 10이 아닐 때만 입력받은 값을 산출, 10이면 반복문 종료 (Scanner 이용)
import java.util.Scanner;

public class DoWhileExam {

  public static void main(String[] args) {
    int value = 0;

// Scanner: java.util 패키지에 있는 클래스. 키보드로부터 값을 입력받을 때 유용한 클래스
    Scanner scan = new Scanner(System.in);
//위처럼 작성하면 키보드로부터 값을 입력받을 수 있는 Scanner객체가 생성됨

    do{
        value = scan.nextInt(); // Scanner클래스를 미용해 키보드로부터 숫자값을 입력받음
        System.out.println("입력받은 수 : " + value);  
    }while(value != 10);  // 입력받은 값이 10이 아닐 경우에는 계속 반복

    System.out.println("반복문 종료");
  }
}
  • do-while 예시 2
    • i가 10보다 작을 때 1씩 증가하는 값 산출, 10 이상이면 반복문 종료 (Scanner 이용)
import java.util.Scanner;

public class DoWhile {

  public static void main(String[] args) {
    int i = 0;
    Scanner scan = new Scanner(System.in);
		
    do {
        i = scan.nextInt();
        System.out.println("입력받은 값은 " + i);
        i++;
			
    }while(i < 10);
    System.out.println("반복문 종료");
    
  }

}

 

 for문 

  • 변수초기화, 조건식, 증감식이 모두 한 줄에 있음
    1. 초기화식은 최초 한 번만 수행
    2. 조건식을 수행 > 수행결과가 false라면 for 반복문을 빠져나감
    3. 수행 결과가 true라면 실행문을 수행
    4. 증감식을 수행
    5. 2번부터 4번까지 반복적으로 수행
    for(초기화식; 조건식; 증감식){
        실행문;
        실행문;
    }
    • for문 예시
      • for문으로 1부터 100까지의 합을 구하는 프로그램
      int total = 0; *//1부터 100까지 합한 결과값을 담기위한 변수 선언*
      
      for(int i = 1; i <= 100; i++){ *//1부터 100까지 반복하기 위한 for 반복문*
      
          total = total + i; *// 1부터 100까지 반복해서 total 변수에 값을 누적*
      }
      System.out.println(total);  *//결과값 출력*
      
      • for문으로 1부터 100까지의 짝수의 합을 구하는 프로그램
  • public class ForExam {
    
      public static void main(String[] args) {
        int total = 0;
        for(int i = 1; i <= 100; i++){
            if(i % 2 != 0){  // 2로 나눈 나머지가 0이 아니라는것은 홀수를 의미
                continue; 
                // 홀수일 경우 total = total + i; 문장이 실행되지 않으므로, 결과적으로 짝수만 더해줌
            }
            total = total + i;
        }
        System.out.println(total);
    
     }
    
    }
  • continue
    • continue 이하의 반복문은 실행시키지 않은 채 다음 순서로 넘어가 반복문은 계속 실행
    • 위의 예시에서, continue를 만나면 total = total + i;는 실행하지 않고 i++로 넘어가 반복문 실행
  • break
    • break를 만난 지점부터 반복문을 아예 빠져나옴

 

실습