조건문 & 반복문 Math.random() 정리

2023. 1. 23. 00:01항해99 시작

반응형

1. if문

개념: 조건에 따라 문장을 건너뛰거나, 반복하거나 하는 프로그램의 flow를 바꾸는 역할을 하는 문장을 '제어문(control statement)'이라고 한다. 

// if 문

if(조건식){
	//조건식이 참(true)일 때 수행 될 문장들을 적는다
}

 

// if-else문

if (조건식) { 
          조건식의 결과가 참일 때 실행하고자 하는 문장;
} else { 
          조건식의 결과가 거짓일 때 실행하고자 하는 문장;
}
// if - else if - else문

if (조건식1) { 
          조건식1의 결과가 참일 때 실행하고자 하는 문장;
} else if (조건식2) { 
          조건식2의 결과가 참일 때 실행하고자 하는 문장;
} else {
          조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 문장;
             즉, 위의 어느 조건식에도 만족하지 않을 때 수행 
             마지막 else블럭은 생략 가능.
}

조건문 예시:

class Control1_3 {
    public static void main(String[] args) {
        char ch = 'p';

        if (ch >= 'a' && ch <= 'z') {
            System.out.println("해당 문자는 영문 소문자입니다.");
        } else if (ch >= 'A' && ch <= 'Z') {
            System.out.println("해당 문자는 영문 대문자입니다.");
        } else {
            System.out.println("해당 문자는 영문자가 아닙니다.");
        }
        
    // '해당 문자는 영문 소문자입니다.' 로 출력

        int score = 70;

        if (score >= 90) {
            System.out.println("A등급입니다.");
        } else if(score >= 80) {
            System.out.println("B등급입니다.");
        } else if(score >= 70) {
            System.out.println("C등급입니다.");
        }
    }
    //' C등급입니다.' 로 출력
}
//중첩 if

if (조건식1) { 
         조건식1의 결과가 참일 때 실행하고자 하는 문장;
          if (조건식2) { 
                   조건식1 과 조건식 2의 결과가 모두 참일 때 실행하고자 하는 문장;
           } else { 
                    조건식1의 결과가 참이고, 조건식2의 결과가 거짓일 때 실행하고자 하는 문장;
            }
} else { 
          조건식1의 결과가 거짓일 때 실행하고자 하는 문장;
}

조건식:

이외:

x = null || x.equals("")  // null타입 혹은 빈자리 일때

// null은 참조형 타입(Reference type)에만 사용할 수 있다. 기본형(Primitive type) 타입의 변수에 할당하게 되면 컴파일 오류가 발생한다.
int value = null; // 컴파일 오류 발생
import java.util.Scanner;

class Ex4_5 {
	public static void main(String[] args) { 
		int  score = 0;
		char grade = ' ', opt = '0';

		System.out.print("점수를 입력해주세요.>");

		Scanner scanner = new Scanner(System.in);// scanner 객체 생성
		score = scanner.nextInt(); // 화면을 통해 입력받은 점수를 score에 저장

		System.out.printf("당신의 점수는 %d입니다.%n", score);

		if (score >= 90) {            // score가 90점 보다 같거나 크면 A학점(grade)
			grade = 'A';
			if (score >= 98) {        // 90점 이상 중에서도 98점 이상은 A+
				opt = '+';	
			} else if (score < 94) {  // 90점 이상 94점 미만은 A-
				opt = '-';
			}
		} else if (score >= 80){      // score가 80점 보다 같거나 크면 B학점(grade)
			grade = 'B';
			if (score >= 88) {
				opt = '+';
			} else if (score < 84)	{
				opt = '-';
			}
		} else {                      // 나머지는 C학점(grade)
			grade = 'C';
		}	
		System.out.printf("당신의 학점은 %c%c입니다.%n", grade, opt);
	}
}

2. switch문:

if 문과 달리 switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽다.

switch문의 제약조건:

1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다. 
2. case문의 값은 정수 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다.
switch문 계산 순서:

1. 조건식을 계산한다.

2. 조건식의 결과와 일치하는 case문으로 이동한다. 

3. 이후의 문장들을 수행한다.

4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다. 단, break; 를 작성해 주지 않으면 switch 문 끝까지 실행됩니다.

 

int num, result;
final int ONE = 1;     // final이 붙어 정수 상수이다
switch (result) {
         case '1':     // OK. 문자 리터럴(정수 49와 동일)
         case ONE:     // OK. 정수 상수
         case "YES"    // OK. 문자열 리터럴
         case num:     // Error. 변수는 불가능 
         case 1.0:     // Error. 실수도 불가능
}

3. 임의의 정수 만들기 Math.random()

난수를 얻기 위해서는 Math.ramdom()을 사용한다. 이 메서드는 0.0~1.0 사이의 범위에 속하는 하나의 double값을 반환한다. 

0.0 <= Math.random() < 1.0

//1~10의 정수를 구하기를 원한다면, 

// 1. 먼저 각 변에 10을 곱한다.
0.0 * 10 <= Math.random()*10 < 1.0 * 10
0.0 <= Math.random()*10 < 10.0 

// 2. 각 변을 int형으로 변환한다. 
(int)0.0 <=(int) Math.random()*10 < (int)10.0
0 <= (int)Math.random()*10 < 10

// 3. 각 변에 1을 더한다.
0 + 1 <= (int)(Math.random()*10) +1 < 10 + 1
1 <= (int)Math.random()*10 < 11

결과: 1~4 사이의 정수를 얻을 수 있다. 1은 포함되고 4는 포함되징 않는다.
// 예시

public class classname {
    public static void main(String[] args) {

        int s = (int)(Math.random()*10)+1; /
        System.out.println("s:" + s);
    }
}

// 결과:  1 <= s < 11 의 정수 값 1개 랜덤으로 출력된다.매번 실행 결과가 다르다.

반복문에 대해서

반복문은 for문, while문, do-while문이 있다. for 문과 while문은 구조와 기능이 비슷하여 서로 변환이 가능하다.

for문: 반복 횟수 알때 사용

while문: 반복 횟수를 모를 때 사용

4. for문

구조:

for(1. 초기화(타입 + 변수저장); 2. 조건식; 3. 증감식){
	// 4. 조건식이 참(true)인 동안 수행될 문장들을 적는다. 
}
// 실행 순서: 
1. 초기화 > 2. 조건식 참일 경우 > 4. 문장 수행 > 3. 증감식 > 2.조건식 참일 경우 
> 4 > 3 > 2 거짓일 경우 > for문 끝내기.

예시; 

for(int i = 0; i<=5; i++){
	System.out.println("Hello");
}

 

초기화: 반복문에 사용될 변수 초기화. 처음에 한번만 수행.

for(int i = 0; i<=5; i++){...}

for(int i = 0, j = 0; i<=5; i++){...} // 초기화 변수가 2개 일 경우, 콤마(,)로 구분한다. 

 

조건식: 조건식의 값이 참(true)이면 반복실행, 거짓(false)이면 중단.

for(int i = 0; i<=5; i++){...}

 

증감식: 매 반복마다 변수의 값이 조건식이 거짓으로 될 때까지 증감식에 의해서 점진적으로 변하고 for문을 종료한다.

for(int i = 0; i<=5; i++){...}

 

위 3가지 요소가 필요하지 않으면 생략할 수 있다. 그리고 참(true)로 간주되어 무한 반복문이 된다. 

for(;;){...}

 

중첩 for문

개념: for문 안에 또 다른 for문을 포함시키는 것이다. 중첩 횟수는 제한되지 않다. 

for (초기화; 조건식1; 증감식) { 
          조건식1의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
          for (초기화; 조건식2; 증감식) { 
                       조건식2의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
           }
}

예시: 99단 만들기

class Control3_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) + "입니다.");
                System.out.println(i + "*" + j + "=" + (i * j));
            }
        }
    }
}

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);
        }
    }
}

do-while문

// do - while: 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);

        System.out.println("do / while 문이 종료된 후 변수 j의 값은 " + j + "입니다.");
    }
}

6. break문

개념: 자신이 포함된 가장 가까운 반복문을 벗어난다. 무한 반복문과 조건문과 함께 사용되어 특적 조건을 만족할 때 반복문을 벗어나게 한다. 

class Control6_1 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 0;

        while (true) {
            if(sum > 100)
                break; // 조건을 만족되면여기서 while문을 완전히 벗어난다. 
            ++i;
            sum += i;
        }// end of while

        System.out.println("i = " + i);
        System.out.println("sum = " + sum);
    }
}

7. continue문

개념: 반복문 내에서만 사용될 수 있으며,반복이 진행중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다. break 문과 달리  continue문은 반복문 전체를 벗어나지 않는다. for문은 증감식으로 이동하여 반복을 하고, while문은 조건식으로 이동한다. 

 

예시:

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;// 증감식으로 이동한다. 조건식이 false 될 때까지 계속 여기서 증감식으로 이동하여 반복한다. 
            System.out.println("i = " + i);
        }
    }
}

 

계속하여 배열

반응형

'항해99 시작' 카테고리의 다른 글

WIL 항해99 6주차 회고록  (0) 2023.02.28
WIL 항해99 4주차 회고록  (0) 2023.02.18