4주차 과제 : 제어문(필수)
2020. 12. 12. 09:38
728x90
목표
자바가 제공하는 제어문을 학습하세요.
학습할 것 (필수)
선택문
반복문
선택문(조건문) - if, switch
if문
- 가장 기본적인 조건문으로 조건식과 괄호{}로 이루어져 있다.
- ' 만일(if) 조건식이 참(true)라면 괄호{} 안의 문장들을 수행하라 ' 는 의미.
- 조건식의 결과는 true 또는 false 이어야 한다.
구조
if ( 조건식 ) {
// 조건식이 참(true)일 때 수행될 문장들
}
//예제
int num = 80;
if( num > 50 ){ // true
System.out.println("num은 50보다 큽니다.");
}
if( num == 50){ // false 괄호안에 문장이 실행되지 않음.
System.out.println("num은 50과 같다.");
}
if( num <= 80){ // true
System.out.println("num은 80보다 작거나 같다.");
}
// 결과
if-else문
- if문에 else블럭이 더 추가된 것.
- 조건식의 결과가 거짓일 때 else블럭의 문장을 수행하라는 뜻이다.
- 조건식에 따라 두 개의 블럭 중 어느 한 블럭의 내용이 수행되고, 전체 if문을 벗어나게 된다.
- 모두 수행되지 않는 경우는 있을 수 없다.
구조
if (조건식) {
//조건식이 true일 때 수행될 문장
} else {
//조건식이 false일 때 수행될 문장
}
//예제
int num = 80;
if( num > 50 ){ // true -> if블럭 실행
System.out.println("num은 50보다 큽니다.");
} else{
System.out.println("num은 50보다 작다.");
}
if( num == 50){ // false -> else블럭 실행
System.out.println("num은 50과 같다.");
} else{
System.out.println("num은 50과 같지 않다.");
}
if(num <= 80){ // true -> if블럭 실행
System.out.println("num은 80보다 작거나 같다.");
} else{
System.out.println("num은 80보다 크다.");
}
//결과
if-else if문
- 수행해야할 경우의 수가 셋 이상인 경우에 사용.
- 순서대로 평가해서 결과가 참인 조건식을 만나면, 해당 블럭만 수행하고 if-else if문을 벗어난다.
- 결과가 참인 조건식이 없다면 else블럭의 문장들이 수행된다.
구조
if (조건식1) {
// 조건식1의 결과가 true일 때 수행될 문장
} else if (조건식2) {
// 조건식2의 결과가 true일 때 수행될 문장
} else if (조건식3) {
// 조건식3의 결과가 true일 때 수행될 문장
} else { // 생략 가능
// 어느 조건식도 만족하지 못했을 때 수행될 문장
}
//예제
int num = 80;
if( num > 50 ){ // 조건식 true -> 해당 블럭 실행
System.out.println("num은 50보다 큽니다.");
} else if ( num == 50){ // 조건식 false
System.out.println("num은 50과 같다.");
} else if( num <= 80){ // 조건식 true지만 위에서 조건식을 만족했기 때문에 이미 if-elseif문을 빠져나감.
System.out.println("num은 80보다 작거나 같다.");
} else{ // 조건식이 모두 false일 때 해당 블럭 실행
System.out.println("조건식 모두 false");
}
//결과
switch문
- 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하여 가독성이 좋다.
실행 순서
- 조건식을 계산
- 조건식의 결과와 일치하는 case문으로 이동
- 문장들을 수행
- break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나감.
- 조건식의 결과와 일치하는 case문이 없는 경우, default문으로 이동
switch문의 제약조건
- 조건식 결과는 정수 또는 문자열이어야 한다.
- case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.
구조
switch (조건식) {
case 값1 :
//조건식의 결과가 값1과 같을 때 수행될 문장
break;
case 값2 :
//조건식의 결과가 값2와 같을 때 수행될 문장
break;
case 값3 :
//조건식의 결과가 값3과 같을 때 수행될 문장
break;
default :
//조건식의 결과와 일치하는 case문이 없을 때 수행될 문장
}
//예제
System.out.println("가위(1), 바위(2), 보(3) 중 하나를 입력하세요 >>>");
Scanner scan = new Scanner(System.in);
int user = scan.nextInt();
int com = (int)(Math.random()*3)+1;
System.out.println(" user : " + user);
System.out.println(" com : " + com);
switch (user - com) {
case 2:
System.out.println("졌습니다.");
break;
case 1:
case -2:
System.out.println("이겼습니다.");
break;
case 0:
System.out.println("비겼습니다.");
break;
}
반복문 - for, while, do-while
for문
- 반복 횟수를 알고 있을 때 적합하다.
- 구조가 복잡하지만 직관적이라 이해하기 쉽다.
- 조건식이 참인 동안 블럭{} 내의 문장들은 반복한다.
- 사용되는 변수가 적은 것이 더 효율적이고 간단하므로 불필요한 변수의 사용을 줄이는 것이 좋다.
구조
for (초기화, 조건식, 증감식) {
// 조건식이 참일 때 수행될 문장
}
- 초기화 : 반복문에 사용될 변수를 초기화하는 부분. 처음에 한번만 수행된다.
- 조건식 : 값이 true이면 반복을 진행, false이면 반복을 중단한다.
- 증감식 : 반복문을 제어하는 변수의 값을 증감시키는 식. 반복될 때 마다 변수의 값이 증감식에 의해 변하다가 조건식이 false가 되어 for문을 벗어난다.
수행순서
- 초기화 수행
- 조건식이 참인 동안 '조건식 -> 수행될 문장 -> 증감식' 의 순서를 반복
- 조건식이 거짓이 되면, for문 전체를 빠져나간다.
//예제
for(int i=0; i<5; i++){
System.out.println("*****");
}
//결과
중첩 for문
- for문안에 다른 for문을 포함시키는 것이 가능하다.
- 중첩의 횟수는 거의 제한이 없음.
//예제
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
System.out.print("*");
}
System.out.println();
}
//결과
향상된 for문
- 타입은 배열 또는 컬렉션 요소의 타입과 같아야 한다.
- 배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장된다.
- 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다.
구조
for ( 타입 변수명 : 배열 또는 컬렉션 ) {
// 반복할 문장
}
//for문
int[] arr = {1, 2, 3, 4, 5};
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
//향상된 for문
int[] arr = {1, 2, 3, 4, 5};
for ( int a : arr ){
System.out.println(a);
}
while문
- 조건식이 false가 될때 까지 블럭{} 내의 문장을 반복한다.
- 조건식을 평가하여 조건식이 false이면 while문을 벗어나고, true이면 블럭{}내의 문장을 수행하고, 다시 조건식으로 돌아간다.
- 조건식이 false가 될때 까지 문장을 반복.
- 조건식은 생략할 수 없고, 조건식이 항상 참이 되도록 하려면 반드시 true를 넣어야 한다.
구조
while (조건식) {
// 조건식의 결과가 true인 동안 반복될 문장
}
for문과 while문 비교
- for문은 초기화,조건식,증감식을 한 곳에 모아 놓은 것일뿐, while문과 다르지 않다.
- for문과 while문은 서로 변환이 가능하다.
- 초기화나 증감식이 필요하지 않은 경우라면, while문이 더 적합함.
//for문
//초기화, 조건식, 증감식
for (int i=1; i<=10; i++) {
System.out.println(i);
}
//while문
int i = 1; //초기화
while(i<=10) { //조건식
System.out.println(i);
i++; //증감식
}
do-while문
- while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{}의 순서가 바뀐 것이다.
- 블력{}을 먼저 수행한 후 조건식을 평가한다.
- 블럭 내의 문장은 최소한 한번은 수행된다.
구조
do {
//조건식의 결과가 true일 때, 수행될 문장
} while (조건식);
728x90
'Development > 백기선님의 온라인 자바 스터디' 카테고리의 다른 글
6주차 과제: 상속 (0) | 2021.01.27 |
---|---|
5주차 과제: 클래스(필수) (0) | 2021.01.27 |
3주차 과제: 연산자 (0) | 2020.11.25 |
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.19 |
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2020.11.14 |