4장 - 조건문과 반복문

·2022년 11월 30일
0

자바의 정석

목록 보기
6/12
post-thumbnail

조건문 - if, switch

0번 ~ 1번 실행된다.

if문

조건식이 참일 때만 괄호 안의 문장들을 수행한다.
조건식의 결과는 ture, false만 가능.

if-else문

조건식이 참일 때와, 거짓일 때 각각 수행할 문장을 만든다

if (조건식) {
	// 조건식이 true일 때 수행될 문장
}
else {
	// 조건식이 false일 때 수행될 문장
}

예시

if (input==0) {
	System.out.println("0이당");
} 
if (input != 0) {
	System.out.println("0 아니당");
}
위 조건문을 else를 이용한다면

if (input==0) {
	System.out.println("0이당");
} else {
	System.out.println("0 아니당");
}
하나의 조건식만 계산하면 되므로 좀 더 효율적이다.

if-else if문

한 문장에 여러 개의 조건식을 써야할 때

if (조건식1) {
	// 조건식1의 결과가 참일 때 수행
} else if (조건식2) {
	// 조건식2의 결과가 참일 때 수행
} else if (조건식3) {
	// 조건식3의 결과가 참일 때 수행
} else {
	// 조건식1,2,3이 모두 거짓일 때 수행, 생략 가능
}

조건식 1,2,3중에 하나라도 수행이 된다면 전체 if-else if문은 끝난다.
else문을 생략했을 때 주의할 점은 1,2,3이 수행됐했을 때 멈추지 않고
바깥의 조건도 수행되는지 봐야할듯

중첩 if문

if문의 블럭 내에 또 다른 if문을 포함. 중첩 횟수에는 제한이 거의 없다.

if (조건식1) {
	//조건식1이 true일 때 수행된다.
    if (조건식2) {
    	//조건식1 true && 조건식2 ture
    } else {
    	//조건식1 ture && 조건식2 false
    }
} else {
	//조건식1 false
}

괄호의 위치를 명확히 하자. else블럭은 가까운 if문에 속한 것으로 간주된다.

switch문

단 하나의 조건식으로 많은 경우의 수를 처리할 수 있다.
조건이 무지하게 많을 때~

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

만일 case문 내부에서 break문을 생략한다면, 다른 break를 만나거나 switch문의 끝을 만나기 전까지 case 조건검사를 하지 않고 모든 문장을 수행해버린다.

5-1 switch문의 제약 조건

  1. switch문의 조건식 결과는 정수 또는 문자열
  2. case문의 값은 정수, 상수, 문자(얘도 정수로 변환해서 찾음)만 가능하며 중복되지 않아야한다.
int num, res;
final int ONE = 1;

...

switch(res) {
	case '1': // 문자라 가능 일치 유무는 머르지
    case ONE: // 상수라 가능
    case "YES" // 문자열 가능
    case num: // 변수라 안됨
    case 1.0: // 실수라 안됨
}

난수 구하기

Math.round() 메서드를 이용한다. 이는 0 <= num < 1 사이의 무작위 double을 뱉음

0.0 <= Math.round() < 1.0

만약 1 ~ 10 사이의 수를 구하고싶다면 어떻게 해야할까?

  1. 각 변에 구하고자 하는 값의 개수를 곱한다.
  2. 각 변을 int형으로 변환한다.
  3. 각 변에 1을 더한다.
0.0 * 10 <= Math.round() * 10 < 1.0 * 10
-> 0.0 <= Math.round() * 10 < 10.0

(int)0.0 <= (int)(Math.round() * 10) < (int)10.0
-> 0 <= (int)(Math.round() * 10) < 10

1 <= (int)(Math.round()*10) + 1 < 11

1 ~ 10 사이의 난수가 따단~ 흑흑

반복문 - for, while, do-while

for문은 반복 횟수를 알 때
while문은 모를 때
do-while은 최소 한번이라도 실행시키고 싶을 때
for, while문은 항상 서로 변환이 가능하다

for문

반복 횟수를 알고 있을 때 굿.

초기화

처음에 한번만 수행된다. 여러개라면 콤마로 이어줄 수 있음

for (int i = 1; i < 10; i++)
for (int i = 1, j = 10; i <= 10; i++; j--;)

조건식

참일 때 반복할건데 참일 조건..

증감식

참에서 벗어날 반복되는 식을 걸어줘야 무한루프에서 나올 수 있당
앞서 배웠던 후위형, 전위형, 복합 등등..

i++, ++i, i += 2, i *= 2 ...

중첩 for문

for문 안에 또 다른 for문을 포함시키는 것이다. 연습은 구구단, 별찍기가 최고~
쉽게 생각하자면, 뭐가 더 많이 반복되어야할까? 하는 기준을 먼저 세우면 좋다

향상된 for문

for (타입 변수명 : 배열, 컬렉션) {
	//반복할 문장
}

배열, 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장된다.
일반 for문과는 달리 배열, 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다

while문

참인 동안 조건식이 거짓이 될 때까지 반복수행한다.

int i = 5;

while (i-- != 0) {
	System.out.println(i + " 번만 더 말할게요");
}

4 번만 더 말할게요
3 번만 더 말할게요
2 번만 더 말할게요
1 번만 더 말할게요
0 번만 더 말할게요

첨에 엥외요 하고 대가리 벅벅 긁은듯
후위형이니까 참조가 먼저 되고, 감소가 이루어진다
5는 조건문 참이니까 안으로 들어감 -> i가 4가 된게 출력
4는 조건문 참이니까 안으로 들어감 -> i가 3가 된게 출력
3는 조건문 참이니까 안으로 들어감 -> i가 2가 된게 출력
2는 조건문 참이니까 안으로 들어감 -> i가 1가 된게 출력
1는 조건문 참이니까 안으로 들어감 -> i가 0가 된게 출력

do-while문

블럭을 먼저 수행한 후, 조건식을 평가한다.
최소한 한번은 수행될 것을 보장한다.

do {
	// 일단 한번 수행하고, 조건문이 참일 때 반복수행
} while(조건문);

break문

자신이 포함된 가장 가까운 반복문을 종료시킨다.

continue

반복문 내에서만 사용 가능, 다음 반복으로 건너뛰기

이름 붙은 반복문

중첩된 반복문이 있을 때, 안에서 바깥 반복문을 종료하고 싶다면 이름을 붙여주면 된다.

Loop1 : for(int i = 2; i <= 9; i++) {
	for (int j = 1; j <= 9; j++) {
    	if (j == 5) {
        	break Loop1; // 외부의 반복문 종료니까 반복문 둘 다 끝남
        }
        System.out.println(i + "*" + j + "=" + i * j);
    }
	System.out.println();
}
profile
어?머지?

0개의 댓글