[Java의 정석] 제어문(Control)

Shiba·2023년 5월 23일
post-thumbnail

📓 제어문

🔸 지식

  • 블럭 { } : 여러문장을 하나로 묶어주는 것
    • 한 문장만 존재한다면 블럭을 사용하지 않아도 된다.
    if(score) > 60){
    	System.out.println("합격입니다");
    }
    if(score) > 60)
    	System.out.println("합격입니다");
    // 위 식과 같은 결과
  • Math.random() : 0.0과 1.0사이의 임의의 double값 반환.
    • 정수값을 반환받고 싶다면 형변환 연산자 사용
Math.random() // // 0.0 <= Math.random() < 1.0
(Math.random()*10) // 0.0 <= (Math.random()*10) < 10.0
(int)(Math.random()*10) // 0 <= (int)(Math.random()*10) < 10

📕 조건문

조건문 : 조건을 만족할때만 { }를 수행

📃 if문

조건식이 참(true)일 때, 괄호{ }안의 문장들을 수행

if(조건식) {
	//조건식이 참일 때 수행.
}

// ex)
if(score > 60){
	System.out.println("합격");
}

📃 if - else문

둘 중의 하나 - 조건식이 참일 때와 거짓일 때로 나눠서 처리

if(조건식){

	//조건식이 참일 때 수행.
}
else{

    //조건식이 거짓일 때 수행.
}

//ex)
if(input == 0)
	System.out.println("0입니다.");
else
	System.out.println("0이 아닙니다");

📃 if - else if문

여러 개 중의 하나 - 여러개의 조건식을 포함한 조건식

if(조건식1){
	//조건식1이 참일 때 수행.
} 
else if(조건식2){
	//조건식1이 거짓이고 조건식2가 참일 때 수행.
}
else if(조건식3){
	//조건식1,조건식2가 거짓이고 조건식3이 참일 때 수행.
}
else{
	//어느 조건식도 참이 아닐때 수행.
}

//ex)
if(score >= 90) //90점 이상
	grade = 'A';
else if(score >= 80)   // 80점 이상 90점 미만
	grade = 'B';
else if(score >= 70) // 70점 이상 80점 미만 
	grade = 'C';
else  //70점 미만
	grade = 'D';

모든 조건식을 만족하더라도 가장 먼저 나오는 블럭만 수행.

ex) 조건식1, 조건식2 둘다 참이더라도 조건식1이 참일 때의 블럭만 수행.

📃 중첩 if문

if문 안if문이 포함됨.

if(조건식1){
	if(조건식2){
    	//조건식1과 조건식2가 참일 때 수행.
    }
    else{
    	//조건식1이 참이고 조건식2가 거짓일 때 수행.
    }
}
else{
	//조건식1이 거짓일 때 수행.
}

//ex)
if(num >= 0)
	if(num != 0)
    	sign = '+';
else
	sign = '-';

📃 switch문

처리해야 하는 경우의 수가 많을 때 유용한 조건문

  • switch문이 처리되는 순서
    1. 조건식을 계산한다.
    2. 조건식의 결과와 일치하는 case문으로 이동한다.
    3. 이후의 문장들을 수행한다.
    4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.

break문이 없으면 참인 부분부터 break문이나 switch문의 끝을 만날 때까지 수행.

swtich(조건식){
	case1 :
    	//조건식의 값이 값1일때 수행.
    	break; //없을시 값2도 수행.
    case2 :
    	//조건식의 값이 값2일때 수행.
        break;
    .
    .
    .
    default :
    	//조건식의 결과와 일치하는 case문이 없을 때 수행.
}

❗ switch문의 제약조건

  • switch문의 조건식 결과정수 또는 문자열이어야 한다.
  • case문의 정수 상수(문자 포함), 문자열만 가능하며, 중복불가능.
int result = 0;
int num  = 2;
final int ONE = 1;

switch(result){
	case '1': //OK. 문자 리터럴
    case ONE: //OK. 정수 상수
    case "YES": //OK. 문자열 리터럴. - JDK 1.7부터 허용
    case num: //에러. 변수는 불가
    case 1.0: //에러. 실수는 불가
}

📙 반복문

반복문 : 조건을 만족하는 동안 { }를 수행

📃 for문

조건을 만족하는 동안 블럭{ }을 반복 - 반복횟수를 알 때 적합

  • for문이 처리되는 순서
    1. 초기식으로 초기화한다.
    2. 조건식을 만족하는지 확인한다.
    3. 조건식이 참이라면 문장들을 수행하고, 거짓이라면 빠져나온다.
    4. 증감식을 실행시키고, 2번 부터 다시 반복한다.
for(초기식; 조건식; 증감식){
	//조건식이 참일 때 수행될 문장
}

//ex)
for(int i = 1; i<=5; i++){ // i = 1,2,3,4,5(true), 6(false)
	System.out.println("do"); // 5번 반복
}

for(int i = 1, j = 10; i<=10; i++,j--)
	System.out.println("i=" + i + "j=" + j);

무한 루프에 걸리는 경우

//무한 루프
for(int i = 1; i<5; i--){ // i = 1,0,-1,-2,-3 ... ∞
	System.out.println("do");
}

📃 중첩 for문

for문 안에 또 다른 for문이 포함됨.

//구구단
for(int i = 2; i<=9; i++){
	for(int j = 1; j<=9; j++){
    	Sytem.out.println(i + "X" + j "= " + (i*j)); 
    }
}

/*
결과)
2X1= 2;
2X2= 4;
2X3= 6;
.
.
.
9X9= 81;
*/

📃 while문

조건을 만족시키는 동안 블럭{ }을 반복 - 반복횟수를 모를 때

while(조건식){
	//조건식의 연산결과가 참인 동안, 계속 반복.
}

//ex)
int i = 1;

while(i<=10){
	System.out.println(i);
    i++; //for문의 증감식으로 볼수 있음. 없을시 무한루프.
}

📃 do - while문

블럭{ }을 최소한 한 번 이상 반복 - 사용자 입력받을 때 유용

do{

	//조건식의 연산결과가 참일 때 수행. (처음 한번은 무조건 실행)

}while(조건식); //끝에 ';'붙이는거 잊지않기

📃 break문

자신이 포함된 하나의 반복문빠져나간다.

// 1
for(int i = 1; i<5; i--){ // i = 1,0,-1,-2,-3 ... ∞
	System.out.println("do");
    if(i < 0)
    	break; // 무한루프지만 조건식만 참이라면 벗어날 수 있음.
}

// 2
int i = 1;

while(i<=10){
	System.out.println(i);
    if(i == 5)
    	break; // i = 5가 될때 탈출.
    i++;
}

📃 continue문

자신이 포함된 반복문끝으로 이동 - 다음반복으로 넘어감.
- 특정 조건을 건너뛸 때 유용

for(int i = 0; i<=10; i++){
	if(i%3==0) // i가 3의 배수일 때 건너뜀.
    	continue;
    System.out.println(i);
}

/*
1
2
//(3)
4
5
//(6)
7
8
//(9)
10
*/

📃 이름붙은 반복문

반복문에 이름을 붙여서 하나 이상의 반복문벗어날 수 있다.

Loop1 : for(int i=2; i<=0; i++) {
	for(int j=1; j<=9; j++){
    	if(j==5)
        	break Loop1; // Loop1을 빠져나감.
        System.out.println(i + "*" + j + "=" + i*j);
    }
    System.out.println();
} // break시 여기로 옴.


/*
2*1=2
2*2=4
2*3=6
2*4=8
*/
profile
모르는 것 정리하기

0개의 댓글