0번 ~ 1번 실행된다.
조건식이 참일 때만 괄호 안의 문장들을 수행한다.
조건식의 결과는 ture, false만 가능.
조건식이 참일 때와, 거짓일 때 각각 수행할 문장을 만든다
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 (조건식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 (조건식1) {
//조건식1이 true일 때 수행된다.
if (조건식2) {
//조건식1 true && 조건식2 ture
} else {
//조건식1 ture && 조건식2 false
}
} else {
//조건식1 false
}
괄호의 위치를 명확히 하자. else블럭은 가까운 if문에 속한 것으로 간주된다.
단 하나의 조건식으로 많은 경우의 수를 처리할 수 있다.
조건이 무지하게 많을 때~
- 조건식을 계산한다
- 조건식 결과와 일치하는 case문으로 이동
- 해당 문장 수행
- break문이나 switch문의 끝을 만났을 때 switch문 전체를 빠져나간다.
만일 case문 내부에서 break문을 생략한다면, 다른 break를 만나거나 switch문의 끝을 만나기 전까지 case 조건검사를 하지 않고 모든 문장을 수행해버린다.
5-1 switch문의 제약 조건
- switch문의 조건식 결과는 정수 또는 문자열
- 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 사이의 수를 구하고싶다면 어떻게 해야할까?
- 각 변에 구하고자 하는 값의 개수를 곱한다.
- 각 변을 int형으로 변환한다.
- 각 변에 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문은 항상 서로 변환이 가능하다
반복 횟수를 알고 있을 때 굿.
처음에 한번만 수행된다. 여러개라면 콤마로 이어줄 수 있음
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문과는 달리 배열, 컬렉션에 저장된 요소들을 읽어오는 용도
로만 사용할 수 있다
참인 동안 조건식이 거짓이 될 때까지 반복수행한다.
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(조건문);
자신이 포함된 가장 가까운 반복문을 종료시킨다.
반복문 내에서만 사용 가능, 다음 반복으로 건너뛰기
중첩된 반복문이 있을 때, 안에서 바깥 반복문을 종료하고 싶다면 이름을 붙여주면 된다.
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();
}