Day 10

ChangWoo·2023년 4월 13일
1

자바의 정석

목록 보기
10/71

ch 4-1~4 조건문 if문과 if-else문

조건문과 반복문

현재까지는 main 메소드 이후 순서로 실행이 되었다.
그런데, 조건문을 사용하게 되면, 다르게 사용할 수 있다.

  • 조건문(if/switch) : 조건을 만족할때만 {}를 수행(0~1번)
    Ex) if (score > 60) {
    System.out.println("합격입니다.");
    System.out.println("축하드립니다.");
    }
  • 반복문(for/while) : 조건을 만족하는 동안 {}를 수행(0~n번)
    Ex) int i = 10;
    while (i > 0) {
    System.out.println(i);
    }
  • 조건문과 반복문은 흐름을 제어하는 문장으로 "제어문"이라 한다.

if문

조건식이 참(true)일 때, 괄호{}안의 문장들을 수행한다.
Ex) if (조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다.
} // 조건식이 참이면 실행, 거짓이면 실행하지 않고 다음으로 넘어간다.
Ex) if (score > 60) {
System.out.println("합격입니다.");
} // score가 60이상이면 "합격입니다."를 출력 / 그래서 연산결과가 true 또는 false만 가능

조건식의 다양한 예

블럭 {}

여러 문장을 하나로 묶어주는 것

  • 코드의 가독성을 위해 탭에 의한 들여쓰기를 한다.
  • 만약에 if문 안의 문장이 하나면 블럭이 생략 가능하다.

if-else문

둘 중의 하나 - 조건식이 참일 때와 거짓일 때로 나눠서 처리
if(조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다.
} else {
// 조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}

ch 4-5~8 if-else if문, 중첩if문

if-else if문

여러 개 중의 하나 - 여러 개의 조건식을 포함한 조건식
if (조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
// 조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) { // 여러 개의 else if를 사용할 수 있다.
// 조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { // 마지막은 보통 else 블럭으로 끝나며, else 블럭은 생략 가능하다.
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
Ex)

중첩 if문 - if문 안의 if

if (조건식1) {
// 조건식1의 연산결과가 true일 때 수행될 문장들을 적는다.
if (조건식2) {
// 조건식 1과 조건식2가 모두 true일 때 수행될 문장들
} else {
// 조건식 1이 true이고, 조건식2가 false일 때 수행될 문장들
} else {
// 조건식1이 false일 때 수행되는 문장들
}
}

  • 괄호를 조심해야 한다. (두 번째 if의 else가 첫 번째 if의 else로 보이지 않도록)

ch 4-9~11 switch문

switch문

처리해야 하는 경우의 수가 많을 때 유용한 조건문

    1. 조건식을 계산한다.
    1. 조건식의 결과와 일치하는 case문으로 이동한다.
    1. 이후의 문장들을 수행한다.
    1. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
  • defalut문은 생략 가능하다.

if문과 switch문의 차이

  1. if문은 true 또는 false 값을 가지지만, switch문은 정수, 문자열의 값을 가진다.
  2. if-else if문은 조건식이 여러 개 나와야 하지만, switch문은 하나면 된다.
  • switch문이 더 효율적이지만, 제약조건이 존재한다.
  • switch문은 항상 if문으로 변경 가능하지만, if문은 무조건적으로 switch문으로 변경할 수 없다.

switch문의 제약 조건

  1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
  2. case문의 값은 정수 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다. (변수 불가능)
    Ex) int num, result;
    final int ONE = 1;
    ...
    switch(result) {
    case '1': // ok. 문자 리터럴(정수 49와 동일)
    case ONE: // ok. 정수 상수
    case "YES": // ok. 문자열 리터럴. JDK 1.7부터 허용
    case num: // 에러. 변수는 불가
    case 1.0: // 에러. 실수도 불가
    ...
    }

ch 4-12 임의의 정수 만들기

임의의 정수(난수) 만들기 (실수도 가능!)

Math.random() - 0.0과 1.0 사이의 임의의 double 값을 반환
0.0 <= Math.random() < 1.0 (0.0 ~ 0.9999...의 사잇 값)

Ex) 1~3정수로 만들기 위해서

    1. 각 변에 3을 곱한다. (개별 값의 갯수)
      0.0 3 <= Math.random() 3 < 1.0 3
      0.0 <= Math.random()
      3 < 3.0 (0.0 ~ 2.999...)
    1. 각 변을 int형으로 변환한다.
      (int)0.0 <= (int)(Math.random() 3) (int)3.0
      0 <= (int)(Math.random()
      3) < 3 (0~2)
    1. 각 변에 1을 더한다.
      0 + 1 <= (int)(Math.random() 3) + 1 < 3 + 1
      1 <= (int)(Math.random()
      3) + 1 < 4

ch 4-13,14 for문

for문

조건을 만족하는 동안 블럭 {}을 반복 - 반복횟수를 알 때 적합

ch 4-15 중첩 for문

중첩 for문

for문 내에 또 다른 for문을 포함시킬 수 있다.

Ex) for(int i=2;i<=9;i++) {
   		for(int j=1;j<=9;j++) {
        	System.out.println(i+"*"+j+"="+(i*j));
        }
     }

별 그리기

Ex) 같은 수의 별들 그리기

for(int i =1;i<=5;i++) {
			// System.out.println("**********");
			for(int j=1;j<=10;j++) {
				System.out.print("*");
			}
			System.out.println();
		}


Ex) 다른 수의 별들 그리기

for(int i =1;i<=10;i++) {
			// System.out.println("**********");
			for(int j=1;j<=i;j++) {
				System.out.print("*");
			}
			System.out.println();
		}

ch 4-16~19 while문, do-while문

while문

조건을 만족시키는 동안 블럭{}을 반복 - 반복횟수 모를 때

  • 반복횟수를 알 때는 for문 / 반복횟수를 모를 때는 while문
    Ex) while (조건식) {
    // 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
    }
  • for문과 while문은 언제든지 변경 가능하다.

do-while문

블럭{}을 최소한 한 번 이상 반복 - 사용자 입력받을 때 유용
Ex) do {
// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.(처음 한 번은 무조건 실행)
} while(조건식); <- 끝에 ';'을 잊지 않도록 주의!

profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글