2023. 1. 19. 08:40ㆍJAVA언어
조건문과 반복문
플로우차트 = 순서도, 흐름도
if
if (조건식) {
조건식의 결과가 참일 때 실행하고자 하는 문장;
}
if -else
if (조건식) {
조건식의 결과가 참일 때 실행하고자 하는 문장;
} else{
조건식의 결과가 거짓일 때 실행하고자 하는 문장;
}
if - else if - else
if (조건식1) {
조건식 1의 결과가 참일 때 실행하고자 하는 문장;
} else if (조건식2) {
조건식2의 결과가 참일 때 실행하고자 하는 문장;
} else {
조건식1, 2의 결과가 모두 거짓일 때 실행하고자 하는 문장;
}
*마지막 else 블럭은 생략이 가능합니다.
중첩 if
if (조건식1) {
조건식 1의 결과가 참일 때 실행하고자 하는 문장;
if (조건식2) {
조건식1, 2의 결과가 모두 참일 때 실행하고자 하는 문장;
} else {
조건식1의 결과가 참이고, 조건식2의 결과가 거짓일 때 실행하고자 하는 문장;
}
} else {
조건식1의 결과가 거짓일 때 실행하고자 하는 문장;
}
블럭{}
SWITCH
switch(조건식) {
case 값1:
조건식의 결과가 값1과 같을 경우 수행할 문장;
break;
case 값2:
조건식의 결과가 값2와 같을 경우 수행할 문장;
break;
....
default:
조건식의 결과와 일치하는 case 문이 없을 때 수행할 문장;
}
처리해야 하는 경우의 수가 많을 때 유용한 조건문입니다.
break; 를 작성해 주지 않으면 switch 문 끝까지 실행됩니다.
default 문은 생략 가능합니다.
if 조건문과 비교해보면 if 는 조건식 결과에 true/false 만 가능하고 switch 는 정수나 문자열 만 가능합니다.
실행 흐름 확인하기
1. 조건식을 계산한다.
2. 조건식의 결과와 일치하는 case 문으로 이동한다.
3. 해당 case 문의 문장들을 수행한다.
4. break; 를 만나거나 switch 문이 끝나면 switch 문 전체를 빠져나간다.
switch문의 제약조건
1. switch 문의 조건식 결과는 정수 또는 문자열 이어야 합니다.
2. case 문의 값은 정수 상수(문자 포함), 문자열 만 가능하며, 중복되지 않아야 한다.
*요일, 날짜에 활용
FOR
for (초기화; 조건식; 증감식) {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
}
실행 순서
1. 초기화
2. 조건식
3. 조건식이 참일 경우 문장 수행
4. 증감식
5. 조건식이 거짓이 될 때 까지 반복
예시
class For1_1 {
public static void main(String[] args) {
int i = 0;
for (i = 0; i < 5; i++) { // 1, 2, 3, 4, 5 ++ = 후위형으로 값이 참조된 후에 +1 for 문이 끝나면 i = 6
System.out.println("for 문이 " + (i + 1) + "번째 반복 실행중입니다.");
}
System.out.println("for 문이 종료된 후 변수 i의 값은 " + i + "입니다.");
}
}
++후위형 복습
중첩 FOR
for (초기화; 조건식1; 증감식) {
조건식1의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
for (초기화; 조건식2; 증감식) {
조건식2의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
}
}
예시_구구단
class For1_4 {
public static void main(String[] args) {
for (int i = 2; i < 10; i++) {
System.out.println(i + "단 시작합니다.");
for (int j = 1; j < 10; j++) {
System.out.println("j는 현재 " + (j) + "입니다."); // (j)는 (1)인데 j++이라는 조건문이 붙어 있으므로 => J는 현재 2 입니다.
System.out.println(i + "*" + j + "=" + (i * j));
}
}
}
}
향산된 FOR
for (타입 변수이름 : 배열 or 컬렉션) {
배열 or 컬렉션의 길이만큼 반복적으로 실행하고자 하는 문장;
}
예시
class For1_5 {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5};
for (int e : arr) {
System.out.print(e + " ");
}
}
}
임의의 정수 만들기
Math.random() => 0.0과 1.0사이의 임의의 double 값을 반환합니다.
1) 0.0 <= Math.random() < 1.0
1부터 5 사이의 random 한 정수 값 구하기
1) 0.0 * 5 <= Math.random() * 5 < 1.0 * 5
2) (int)0.0 <= (int)(Math.random() * 5) < (int)5.0
3) 0 + 1 <= (int)(Math.random() * 5) + 1 < 5 + 1
4) 1 <= (int)(Math.random() * 5) + 1 < 6
class Control4_1 {
public static void main(String[] args) {
// 괄호 { } 안의 내용을 20번 반복
// 1. 1 ~ 10 사이의 난수를 20개 출력하시오.
// 1,2,3,4,5,6,7,8,9,10
// 2. -5 ~ 5 사이의 난수를 20개 출력하시오.
// -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
for (int i = 0; i < 20; i++) {
// 1번
// System.out.println(Math.random() * 10); // 1. 0.0 * 10 <= x * 10 < 1.0 * 10
// System.out.println((int)(Math.random() * 10)); // 2. 0 <= (int)(x * 10) < 10
// System.out.println((int)(Math.random() * 10) + 1); // 3. 1 <= (int)(x * 10) + 1 < 11
// 2번
// System.out.println((int)(Math.random() * 11)); // 0 ~ 10
// System.out.println((int)(Math.random() * 11) - 5); // -5 ~ 5
}
}
WHILE
while (조건식) {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
}
실행 순서
1. 조건식
2. 조건식이 참일 경우 문장 수행
3. 조건식이 거짓이 될 때 까지 반복
class Control5_1 {
public static void main(String[] args) {
int i = 10; // while 반복 횟수 , 즉 for 문의 초기화
// while (i-- != 0) {
// System.out.println(i);
// }
// 위 코드와 같은 동작을 수행합니다.
while (i != 0) {
i--;
System.out.println(i);
}
}
}
class Control5_2 {
public static void main(String[] args) {
int sum = 0;
int i = 0;
while (sum <= 100) {
System.out.println("i = " + i);
System.out.println("sum = " + sum);
sum += ++i;
}
}
}
do = while
do {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
} while (조건식);
실행 순서
1. 처음 한 번은 무조건 실행
2. 조건식
3. 조건식이 참일 경우 문장 수행
4. 조건식이 거짓이 될 때 까지 반복
class Control5_3 {
public static void main(String[] args) {
int j = 1;
do {
System.out.println("do / while 문이 " + j + "번째 반복 실행중입니다.");
j++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨.
} while (j < 20); // while이 빠지면 오류가 생김.
System.out.println("do / while 문이 종료된 후 변수 j의 값은 " + j + "입니다.");
}
}
BREAK
자신이 포함된 하나의 반복문을 벗어납니다. (switch문에 사용했음.)
class Control6_1 {
public static void main(String[] args) {
int sum = 0;
int i = 0;
while (true) {
if(sum > 100)
break;
++i;
sum += i;
}
System.out.println("i = " + i);
System.out.println("sum = " + sum);
}
}
CONTINUE (skip으로 이해)
자신이 포함된 반복문의 끝으로 이동
- 그리고 다음 반복으로 넘어갑니다.
- 전체 반복 중에서 특정 조건시 반복을 건너뛸 때 유용합니다.
class Control6_2 {
public static void main(String[] args) {
for (int i = 0; i <= 10; i++) {
// 3의 배수는 건너뜀 : 3, 6, 9
if (i % 3 == 0)
continue;
System.out.println("i = " + i);
}
}
}
이름붙은 반복문
반복문에 이름을 붙여서 하나 이상의 반복문을 벗어납니다.
class Control6_3 {
public static void main(String[] args) {
allLoop :
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (i == 5) {
break allLoop;
}
System.out.println(i + " * " + j + " = " + (i * j));
}
}
}
}
class Control6_4 {
public static void main(String[] args) {
int i = 2;
allLoop :
while (true) {
for (int j = 1; j < 10; j++) {
if (i == 5) {
break allLoop;
}
System.out.println(i + " * " + j + " = " + (i * j));
}
i++;
}
}
}
둘은 동일한 결과 값을 가져온다.