005. Java의 정석 기초편 ch4 조건문과 반복문

코딩벌레·2023년 5월 25일
0

Java의 정석

목록 보기
4/4

01. if문


if문은 가장 기본적인 조건문으로 'if(조건식){}'의 형태로 구성된다.
조건식이 참이면 괄호({})안의 문장들을 수행한다.

if ( score > 60 ) {
	System.out.println("합격입니다!");
}

score > 60 의 결과가 true이면 출력을 실행하고 false라면 출력 없이 다음 코드로넘어간다.

03. 블럭


java 코드에서는 괄호 {}를 이용해 여러 문장을 하나의 단위로 묶을 수 있는데 이것을 '블럭(block)'이라고 한다.

위 조건문에서 조건에 따라 실행될 코드가 한 줄이라면 블럭 없이 조건문 뒤에 붙여 작성해도 무관하다.
하지만 두 줄 이상의 코드라면 반드시 블럭으로 묶어야 한다.

if ( score > 60 ) System.out.println("합격입니다!");

if ( score > 60 ) {
	System.out.println("합격입니다!");
    System.out.println("축하드립니다!");
}

04. if-else문


if-else문은 if문의 변형으로 조건문의 결과가 true일 때 if 블럭의 문장을 수행하고, false일 때 else 블럭의 문장을 수행한다.

if ( score > 60 ) {
	System.out.println("합격입니다!");
} else {
	System.out.println("불합격입니다...");
}

05. if-else if문

if-else문은 참과 거짓의 두가지 경우 중 하나가 수행되는 구조인데, 처리해야 할 경우가 셋 이상인 경우에 if-else if문을 사용한다.

if ( score >= 90 ) {
	System.out.println("A");
} else if ( score >= 80 ) {
	System.out.println("B");
} else if ( score >= 70 ) {
	System.out.println("C");
} else if ( score >= 60 ) {
	System.out.println("D");
} else {
	System.out.println("F");
}

06. if-else if문 예제

import java.util.Scanner;

class ex4_4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int score = 0;
        char grade = ' ';

        System.out.print("점수 : ");
        score = scanner.nextInt();

        if ( score >= 90 ) {
            grade = 'A';
        } else if ( score >= 80 ) {
            grade = 'B';
        } else if ( score >= 70 ) {
            grade = 'C';
        } else if ( score >= 60 ) {
            grade = 'D';
        } else {
            grade = 'E';
        }
        System.out.print("당신의 학점은 "+grade+"입니다.");
    }
}

else if문을 사용할 때, 두번째 조건은 score 값이 80이상, 90미만이어야 하지만 조건문은 score>=80이라고 적는다.
위의 조건문이 false임을 전제로 하는 조건이기 때문에 중복해서 적을 필요가 없는 것이다.
물론 score<90 && score>=80 으로 적어도 문제는 없다.

07. 중첩 if문


중첩 if문은 말 그대로 if문 안에 if문이 포함되는 것이다. if문의 블럭 안에 또다른 if문을 작성하여 만들 수 있다.
if ( Month == 12 ) {
	if ( Day == 25 ) {
    	System.out.println("Merry Christmas!");
    }
}

08. 중첩 if문 예제

if ( score >= 90 ) {
	grade = 'A';
    
	if ( score >= 98 ) {
    	opt = '+';
    } else if ( score < 94 ) {
    	opt = '-';
    }
}

09. switch문


if문은 조건식의 결과가 참과 거짓의 두가지 뿐이기 때문에 경우의 수가 늘어나면 if문을 계속 추가해야 하므로 코드가 복잡해지고 처리시간이 많이 걸린다.

그런 if문과 달리 switch문은 하나의 조건문에 대한 여러 경우의 수를 처리할 수 있고 표현이 간결하므로 알아보기 쉽다.

 switch(score/10) {
 	case 9 :
    	grade = 'A'
        break;		// switch문에서 벗어남
    case 8 :
    	grade = 'A'
        break;
    .
    .
    .
    default :
// 조건식의 결과와 일치하는 case문이 없을 때에는 default로 수행

switch문은 각 case를 블럭으로 구분하지 않기 때문에 break문을 만나거나 switch문의 블럭이 끝날때까지 만나는 모든 문장들을 수행한다.
그래서 각 case문의 마지막에는 break를 잊지말고 적어야 한다.

10. switch문의 제약조건

switch문의 조건식의 결과는 정수 또는 문자열이어야 한다.

또한 case문의 값은 정수, 상수(문자 포함), 문자열만 가능하며 중복되지 않아야 한다.

11. switch문의 제약조건 예제

switch ( month ) {
	case 3:
    case 4:
    case 5:
    	System.out.println("지금은 봄입니다.");
        break;
    case 6: case 7: case 8:
    	System.out.println("지금은 여름입니다.");
        break;
    case 9: case 10: case 11:
    	System.out.println("지금은 가을입니다.");
    default:
    	System.out.println("지금은 겨울입니다.");
    }

12. Math.random()


Math.random() 메서드는 0.0과 1.0 사이의 범위에 속하는 double 값을 반환한다. 그 외의 값을 구하려면 메서드에 수를 곱하거나 더하는 방식으로 식을 변형한다.
0.0 <= Math.random() < 1.0

0.0*3 <= Math.random()*3 < 1.0*3	// 모든 변에 3을 곱함 -> 0.0과 3.0 사이의 난수 생성

0.0*3+1 <= Math.random()*3+1 < 1.0*3+1	// 모든 변에 1을 더함 -> 1.0과 4.0사이의 난수 생성

13. for문


조건문과 같이 반복문에도 여러 종류가 있다.
그 중 for문은 반복 횟수를 알고 있을 때 사용한다.

for문의 구조는 for(초기값;조건식;증감식){}으로 이루어져 있다.

for ( int i = 1 ; i <= 5 ; i ++ ) {
	System.out.println(" I can do it ! " );
}

for문의 수행 순서는 우선 반복계수(i)가 초기화되고, 그에 대한 조건식이 참이라면 블럭 안의 문장을 수행한다.
수행을 마치면 증감식을 계산하고 계산 결과에 대한 조건식이 참이라면 반복해서 블럭 안의 문장을 수행한다.
그러다 조건식이 거짓이 되면 for문을 빠져나가게 된다.

14. for문 예제

class Ex4_9 {
	public static void main(String[] args) {
    	for(int i = 1; i <= 5; i ++) {
        	System.out.println(i);
        }
    }
}

i값이 1로 초기화되고 조건식을 만족하는 동안 5번 반복되므로 실행 결과는 1부터 5까지의 숫자가 차례대로 출력될 것이다.
5번째 출력을 마치면 i값이 6이되므로 조건식이 거짓이 되어 for문을 벗어나고 실행이 종료된다.

이론 정리는 여기까지 하려고 한다.
오늘 TIL 실시간 강의를 들었는데 내가 하고 있는게 마냥 정답은 아니었던 것 같다.
다음 주부터는 좀 더 실습 위주로 문시해알을 정리해야겠다.
(문제점, 시도한 방법, 해결책, 알게된 점)

0개의 댓글