DEV/JAVA
조건문과 반복문
devvnn
2021. 12. 12. 15:04
01. if, else if, else
기본 문법
// 조건문의 기본 구조
if (조건 부분 1) {
// 수행 부분 1
} else if(조건 부분 2) {
// 수행 부분 2
} else if(조건 부분 3) {
// 수행 부분 3
} else {
// 수행 부분 4
}
- 조건 부분 1이 true이면 수행 부분 1 실행, 수행 부분 2~4는 실행 X
- 조건 부분 1이 false이면 수행 부분 1은 건너 뛰고 조건 부분 2를 확인, 조건 부분 2가 true이면 수행 부분 2가 수행되고 조건문이 끝남
- 조건 부분 1 ~ 조건 부분 3 모두 false이면 수행 부분 4가 실행
예제 1
// 예제 1
int number = 13;
if(number % 2 == 0) {
System.out.println("even number");
} else {
System.out.println("odd number");
}
// 최종 결과값 : odd number
예제 2
// 예제 2
int x = 10;
int y = 1;
if(x != 10 || x% 2 != 0) { // x가 10이 아니거나 x 나누기 2가 0이 아니면
System.out.println(x); // x를 출력
} else if(y == 1) { // y가 1이면
System.out.println(y); // y를 출력
} else { // 다 아니면
System.out.println(x + y); // x + y 출력
}
// 최종 결과값 : 1
실습
정수형 변수 a, b에 대하여 다음의 조건들을 만족하는 코드를 작성해 봅시다.
- a와 b가 같으면 "a와 b가 같습니다. a = b = [a의 값]"를 출력합니다.
- a와 b가 같지 않으면 "a와 b는 같지 않습니다"를 출력합니다.
- 조건 (2)의 출력문 이후에, a가 b보다 더 큰 경우 "a가 b보다 [a, b의 차]만큼 더 큽니다."를 출력합니다.
- 조건 (2)의 출력문 이후에, b가 a보다 더 큰 경우 "b가 a보다 [a, b의 차]만큼 더 큽니다."를 출력합니다.
public class Main {
public static void main(String[] args) {
int a = 38, b = 27;
if(a == b){
System.out.println("a와 b는 같습니다. a = b = " + a);
}else{
System.out.println("a와 b는 같지 않습니다.");
if(a > b){
System.out.println("a가 b보다 " + (a-b) + "만큼 더 큽니다");
}else{
System.out.println("b가 a보다 " + (b-a) + "만큼 더 큽니다");
}
}
// 실행 결과
// a와 b는 같지 않습니다.
// a가 b보다 11만큼 더 큽니다.
}
}
02. switch문
기본 문법
- if문의 조건 부분은 불린 결과값을 내는 방식이었지만, switch문의 조건 부분은 숫자, 문자열 등의 결과값을 내는 식
- 그 결과값에 따라 실행 되는 코드가 정해지는 것
- 모든 switch문은 if문으로 변경 가능하지만, 반대는 불가
- 합격-불합격, 옳다-그르다 등과 같은 방식으로 여러 개의 동등한 조건의 나열에는 switch문이 더 편리함
// 기본 문법
int i = 10;
if( i % 3 == 0) { // i < 20 : 불린 식, 변수, 메소드
System.out.println("C 구역입니다.");
} else if(i % 3 == 1) {
System.out.println("A 구역입니다.");
} else {
System.out.println("B 구역입니다.");
}
switch(i % 3) { // i : 불린이 아닌 식, 변수, 메소드
case 0:
System.out.println("C 구역입니다.");
break;
case 1:
System.out.println("A 구역입니다.");
break;
default:
System.out.println("B 구역입니다.");
break;
}
예제 1
// 예제 1
/*
* A+ : 100
* A : 90-99
* B : 80-89
* C : 70-79
* D : 60-69
* F : 0-59
*/
// 시험 점수
int score = 97;
// 성적
String grade;
switch(score / 10) {
case 10:
grade = "A+";
break;
case 9:
grade = "A";
break;
case 8:
grade = "B";
break;
case 7:
grade = "C";
break;
case 6:
grade = "D";
break;
default:
grade = "F";
break;
}
System.out.println("성적 : " + grade); // 성적 : A
예제 2
break의 역할
// 예제 2
// switch의 조건 변수를 문자열 변수 grade로
String grade = "F";
switch (grade) {
case "A+":
case "A":
case "B":
System.out.println("참 잘했어요!");
break;
case "C":
case "D":
System.out.println("조금만 더 노력해 볼까요?");
break;
case "F":
System.out.println("Fail입니다.");
default:
System.out.println("다시 수강해주세요.");
break;
}
// 결과값
// Fail입니다.
// 다시 수강해 주세요.
- grade가 "A" or "B"이면 "참 잘했어요."가 출력되고, "C" or "D"이면 "조금만 더 노력해 볼까요?" 출력
- grade가 "F"면 "Fail 입니다."가 출력되고, break가 없으니 default로 넘어가서 "다시 수강해 주세요." 까지 출력
실습
정수 134354를 7로 나눈 나머지를 영어로 출력하세요.
예를 들어서 134354를 7로 나누었을 때 나머지가 0이면 콘솔에 "Zero"가 출력되어야 하고, 1 이면 콘솔에 "One"이 출력되어야 하고, 2이면 "Two"가 출력되어야 하고, 6이면 "Six"이 출력되어야 합니다. (어떤 수를 7로 나누었을 때, 나올 수 있는 나머지의 최솟값은 0이고, 최댓값은 6입니다.)
public class Main {
public static void main(String[] args) {
int number = 134354;
switch(number % 7){
case 0:
System.out.println("Zero");
break;
case 1:
System.out.println("One");
break;
case 2:
System.out.println("Two");
break;
case 3:
System.out.println("Three");
break;
case 4:
System.out.println("Four");
break;
case 5:
System.out.println("Five");
break;
default:
System.out.println("Six");
break;
}
}
}
03. while문
기본 문법
// 기본 문법
while(조건 부분) {
수행 부분
}
- while문은 조건 부분이 true인 동안 계속 반복해서 수행부분을 실행하는 구문
- 수행부분에서 조건이 false가 되도록 바꾸어주거나, break;를 통해서 반복문을 종료시킬 수 있음
- while문은 반복 횟수를 정확히 알 수 없는 동작, 혹은 특별한 조건에서만 멈추어야할 경우 등에서 자주 사용
- for문은 반복 횟수를 while문보다 직관적으로 조절할 수 있다는 점이 차이점
예제
1, 2, 3,...을 하나씩 더한 값이 10000보다 크거나 같아졌을 때, 마지막으로 더한 값은?
int sum = 0;
int i = 1;
while(sum < 10000) {
sum += i; // sum = sum + i;
i++;
}
System.out.println(sum); // 10011
System.out.println(i - 1); // 141
- while문을 수행하기 전에 필요한 변수는 합을 기록할 "sum"과 1씩 증가시키며 더해야 할 "i"
- while문의 조건은 sum < 10000, sum이 10000보다 작을 동안 i를 1씩 증가시키는 과정을 반복해야하기 때문.
- 조건 부분을 통과하면 sum에 i를 더하고, i에 1을 더함
- 반복문이 끝나고 값들을 출력해보면 예상대로 sum은 10000보다 크거나 같고, 마지막에 더한 값을 알 수 있음
예제를 break 써서 풀기
int sum = 0, i = 1;
while(true) {
if(sum >= 10000) {
break;
}
sum += i;
i++;
}
System.out.println(sum); // 10011
System.out.println(i - 1); // 141
- while(true)를 써줬기 때문에 모든 경우에 반복문이 들어감, 대신 sum >= 10000가 true인 경우에 반복문은 끝남
실습
10000 미만의 정수 중에서, 153의 배수중 가장 큰 값을 찾아 출력하세요.
public class Main {
public static void main(String[] args) {
// 내가 쓴 답
int num = 10000;
int key = 153;
int i = 1;
int count = 0;
while(num > (i*key)){
count = i*key;
i++;
}
System.out.println(count); // 9945
// 정답
int num = 10000;
int key = 153;
while(num % key > 0){
num--;
}
System.out.println(num);
}
}
03. for문
기본 문법
// 기본 문법
for(초기화식; 종결 제어식; 증감 제어식) {
// 수행 부분
}
- 초기화식(initailization)
- 종결 제어식(termination)
- 증감 제어식(increment)
예제
for문을 이용해서 1부터 10까지 출력하기
for(int i = 1; i <= 10; i++) {
System.out.println(i);
}
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
// 10
- 초기화식에서 i라는 정수를 선언해주고 1을 지정 // int i = 1;
- i가 10보다 작거나 같을 동안 반복 // i <= 10;
- 수행 부분이 끝나면 i를 1 늘려줌 // i++
Q. for문은 언제 사용하나요?
for문은 while문과 달리 초기화식이 있고 for문 안에서만 쓸 수 있는 변수를 만들 수 있음
이러한 장점때문에 아래의 경우 등에 많이 사용
- 반복의 인덱스가 필요한 경우
- 반복의 최대 횟수가 정해진 경우
- 갯수가 정해진 데이터 셋(배열, 리스트 등)의 내용을 하나씩 봐야할 경우
※ 물론 while문으로 작성된 내용을 for문으로, for문으로 작성된 내용을 while문으로 작성할 수 있지만 더 자주 쓰이는, 더 직관적이고 편한 경우들이 있음
예제
1부터 100까지의 합을 구하시오
int sum = 0;
for(int i = 1; i<=100; i++) {
sum += i; // sum = sum + i;
}
System.out.println(sum); // 5050
}
- 반복문 밖에서 int 변수 sum을 만들어 주고 0으로 초기화 해줌(총합계를 저장하기 위해)
- 반복문 작성 - 내부에서만 사용할 변수 i를 초기화식에 써주고 i를 하나씩 늘려나가며 더하고 100까지만 더하기
실습
구구단 출력하기
public class Main {
public static void main(String[] args) {
for(int i = 1; i <= 9; i++){
for(int j = 1; j <= 9; j++){
System.out.println(i + " * " + j + " = " + (i*j));
}
}
}
}
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
.
.
.
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81