자바의정석4(제어문)

min seung moon·2021년 3월 1일
0

자바의정석

목록 보기
4/8

01. 조건문과 반복문(제어문, flow control statement)

  • 조건문 : 조건을 만족할 때만 {}를 수행(0~1번)
if(score) {
	System.out.println("합격입니다.");
    	System.out.println("축하드립니다.");
}
- score가 참이면 합격입니다. 축하드립니다. 출력
- score가 거짓이면 아무런 값도 출력되지 않는다
  • 반복문 : 조건을 만족하는 동안 {}를 수행(0~n번)
int i = 10;
while(i-- > 0) {
	System.out.println(i);
}
- while문의 (조건)이 참일 때 까지 {}가 반복 실행
- 10 9 8 7 6 5 4 3 2 1 // 출력
- 조건이 거짓이면 한번도 실행되지 않는다
  • 조건식의 다양한 예

  • 블럭({})
    - 여러 문장을 하나로 묶어주는 것

    • 단일 문장일 경우 {} 생략 가능

1. 조건문(if문)

if문

  • 조건식이 참(true)일 때, 괄호 {}안의 문장들을 수행
if (조건식) {
	// 조건식이 참(true)일 때 수행될 문장들을 적는다
}
if ( score > 60) {
	System.out.println("합격입니다");
}

if-else문

  • 둘 둥의 하나 - 조건식이 참일 때와 거짓일 때로 나눠서 처리
if (조건식) {
	// 조건식이 참일 때 수행될 문장들을 적는다
} else {
	// 조건식이 거짓일 때 수행될 문장들을 적는다
}
if ( score > 60) {
	System.out.println("합격입니다");
} else {
	System.out.println("불합격입니다");
}

if-else if문

  • 여러 개 중의 하나 - 여러 개의 조건식을 포함한 조건식
if (조건식1) {
	// 조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
	// 조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
	// 조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { // 마지막은 보통 else 블럭으로 끝내며, else 블럭은 생략 가능
	// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
if ( score > 90) {
	System.out.println("1지망 합격입니다");
} else if (score > 80) {
	System.out.println("2지망 합격입니다");
} else if (score > 70) {
	System.out.println("3지망 합격입니다");
} else if (score > 60) {
	System.out.println("4지망 합격입니다");
} else {
	System.out.println("불합격입니다");
}

중첩 if문 - if문 안의 if

if (조건식1) {
	if (조건식2) {
    	// 조건식1과 조건식2가 모두 true일 때 수행될 문장들
    } else {
    	// 조건식1이 true이고, 조건식2가 false일 때 수행되는 문장들
    }
} else {
	// 조건식1이 false일 때 수행되는 문장들
}
if (score > 60) {
	if (score > 80) {
    	System.out.println("1급 합격입니다");
    } else {
    	System.out.println("2급 합격입니다");
	}
} else {
	System.out.println("불합격입니다");
}

2. 조건문(switch문)

  • 처리해야 하는 경우의 수가 많을 때 유용한 조건문
  • case의 실행문은 break를 만날 때 까지 실행되거나 default나 switch문 끝까지 실행
switch (조건식) {
	case 값1 :
    	// 조건식의 결과가 값1과 같은 경우 수행될 문장들
        // ...
        break;
	case 값2 :
    	// 조건식의 결과가 값2와 같은 경우 수행될 문장들
        // ...
        break;
	default :
    	// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
        // ...
}
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("가을");
        break;
    default :
    	System.out.println("겨울");
}

switch문의 제약조건

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

3. 난수 만들기(임의의 정수, 임의의 실수)

  • Math.random() : 0.0과 1.0사이의 임의의 double값을 반환
    • 0.0 <= Math.random() < 1.0
    • 1 ~ 3 사이의 난수를 구하고 싶다
      -> 0.0 3 <= Math.random() 3 < 1.0 3
      -> 0.0 <= Math.random()
      3 < 3.0
      -> (int)0.0 <= (int)(Math.random() 3) < (int)3.0
      -> 0 <= (int)(Math.random()
      3) < 3
      -> 0 + 1 <= (int)(Math.random() 3) + 1 < 3 + 1
      -> 1 <= (int)(Math.random()
      3) + 1 < 4
      -> (int) (Math.random() * 3) + 1

4. 반복문 (for문)

for문

  • 조건을 만족하는 동안 블럭{}을 반복 - 반복횟수를 알 때 적합
- 초기화는 가장 먼저 딱 한번 실행된다
- 조건 -> 수행 -> 증감이 조건이 참일 때 까지 수행되며 거짓이면 종료된다
for (초기화; 조건식; 증감식) {
	수행될 문장
}
for (int i = 0; i < 10; i++) {
	System.out.println(i);
}
// 0 1 2 3 4 5 6 7 8 9
for (int i = 0; i < 10; i = i+2) {
	System.out.println(i);
}
// 0 2 4 8
// 각 자리수의 합
int num = 0, sum = 0;
System.out.print("숫자를 입려가세요.(예:1234)>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);

for(num; num > 0; num = num / 10) {
	// num을 1-으로 나눈 나머지를 sum에 더함
    sum += num%10; // sum = sum + num % 10;
    System.out.printf("sum=%3d num=%d%n",sum, sum);
}
System,out.println("각 자리수의 합 : "+sum);

중첩 for문

  • for문 내에 또 다른 for문을 포함시킬 수 있다
for (초기화; 조건식; 증감식) {
	for (초기화; 조건식; 증감식) {
		수행될 문장
	}
}
for (int i = 2; i <= 9; i++) {
	for (int j = 1; j <= 9; j++) {
		System.out.println(i + "X" + j + "=" + i*j);
	}
}
// 구구단
for (int i = 1; i <= 10; i++) {
	for (int j = 1; j <= i; j++) {
		System.out.print("*");
	}
    System.out.println();
}
// 반 피라미드

4. 반복문 (while문)

  • 조건을 만족시키는 동안 블럭{}을 반복 - 반복횟수 모를 때
while (조건식) {
	// 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다
}
int i = 5; // 반복 횟수
while (i-- != 0) {
	System.out.println(i);
}
// 4 3 2 1 0
// 각 자리수의 합
int num = 0, sum = 0;
System.out.print("숫자를 입려가세요.(예:1234)>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);

while(num != 0) {
	// num을 1-으로 나눈 나머지를 sum에 더함
    sum += num%10; // sum = sum + num % 10;
    System.out.printf("sum=%3d num=%d%n",sum, sum);
    sum /= 10; // num을 10으로 나눈 값
}
System,out.println("각 자리수의 합 : "+sum);

5. 반복문 (do-while문)

  • 블럭{}을 최소한 한 번 이상 반복 - 사용자 입력받을 때 유용
do {
	// 조건식의 연살결과가 참일 때 수행될 문장들을 적는다.(처음 한 번은 무조건 실행)
} while (조건식);
int input = 0, answer = 0;

answer = (int)(Math.random()*100)+1;
Scanner scanner = new Scanner(System.in);

do {
	System.out.println("1과 100사이의 정수를 입력하세요.>");
    input = scanner.nextInt();
    
    if(input > answer) {
    	Sustem.out.println("더 작은 수로 다시 시도해보세요.");
    } else if (input < answer) {
    	System.out.println("더 큰 수로 다시 시도해보세요.");
    }
} while(input != answer);
System.out.println("정답입니다");
// while문으로 변경
int input = 0, answer = 0;

answer = (int)(Math.random()*100)+1;
Scanner scanner = new Scanner(System.in);

System.out.println("1과 100사이의 정수를 입력하세요.>");
input = scanner.nextInt();

while(input != answer) {
    if(input > answer) {
    	Sustem.out.println("더 작은 수로 다시 시도해보세요.");
    } else if (input < answer) {
    	System.out.println("더 큰 수로 다시 시도해보세요.");
    }
    System.out.println("1과 100사이의 정수를 입력하세요.>");
	input = scanner.nextInt();
} 
System.out.println("정답입니다");

6. break문

  • 자신이 포함된 하나의 반복문을 벗어난다
while(true) {
	if (sum > 100)
    	break;
    ++i;
    sum += i;

7. continue문

  • 자신이 포함된 반복문의 끝으로 이동 - 다음 반복으로 넘어감
  • 전체 반복 중에서 특정 조건시 반복을 건너뛸 때 유용
for (int i = 0; i <= 10; i++) {
	if (i%3 == 0)
    	continue;
    System.out.println(i);
}
// 1 2 4 5 7 8 10

8. 이름붙은 반복문

  • 반목문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다
// for문에 Loop1이라는 이름을 붙여준다
Loop1 : for(int i = 2; i <= 9; i++) {
	for (int j = 1; j <= 9; j++) {
    	if(j==5)
        	break Loop1;
            // break;
            // continew Loop1;
            // continue;
        System.out.println(i + "X" + j + "=" + i*j);
    } // end of for i
    System.out.println();
} // end of Loop1
// 2 X 1 = 2, 2 X 2 = 4, 2 X 3 = 6, 2 X 4 = 8
profile
아직까지는 코린이!

0개의 댓글