본문 바로가기
☕️ JAVA

JAVA의 제어문

by kukim 2021. 11. 1.

if, switch, for, while문과 간단한 연습문제를 풀어봅니다.

제어문(control statement) 🕹

  • 프로그램의 흐름(flow)을 바꾸는 역할을 하는 문장
    • 조건에 따라 문장 건너뛰기
    • 반복 수행 등

1. 조건문 🤸‍♀️

1.1 if 문

  • JAVA도 C계열 언어이기 때문에 제어문 문법이 유사하다.
  • if 문
if (조건식){

}

public class Main {
    public static void main(String[] args){
        int x = 0;

        if (x == 0){
            System.out.println("x==0");
        }
        if (x != 0) {
            System.out.println("x!=0");
        }
        x = 1;
        if (x == 1){
            System.out.println("x==1");
        }
        if (x != 1){
            System.out.println("x!=1");
        }
    }
}

// 결과
x==0
x==1
  • if else 문
// if-else
if (조건식){

...
} else{

...
}
  • if - else if 문
// if - else if - else
if (조건식1){

} else if (조건식2) {

} else if (조건식3) {

} else {

}

package com.kukim;

import java.util.Scanner;

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

        System.out.println("점수를 입력하세요");
        Scanner scanner = new Scanner(System.in);
        score = scanner.nextInt();

        if (score >= 90){
            grade = 'A';
        } else if (score >= 80){
            grade = 'B';
        } else if (score >= 70){
            grade = 'C';
        } else {
            grade = 'F';
        }
        System.out.println("성적 : " + grade + "입니다");
    }

}

// 결과
점수를 입력하세요
99
성적 : A입니다
  • 중첩 if 문
if (조건식1) {
    if (조건식2) {

    } else{
    }
} else {

}

package com.kukim;

import java.util.Scanner;

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

        System.out.println("점수를 입력하세요.");
        Scanner scanner = new Scanner(System.in);
        score = scanner.nextInt();

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

        System.out.println("성적 : " + grade + opt);
    }
}

// 결과
점수를 입력하세요.
99
성적 : A+

1.2 switch 문

  • case 문 안의 break; 가 없다면 C와 동일하게 탈출하지 않고 그 아래 코드를 계속 실행한다. (fall-through)
  • JAVA만의 특이점이 있다면 조건식에 String(문자열) 사용이 가능하다.
switch (조건식){
    case 값1:
        ...
        ...
        break;
    case 값2:
        ...
        ...
        break;
    default:
        ...
        ...
        break;

package com.kukim;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        int score;
        char grade = ' ';

        System.out.println("점수를 입력하세요");
        Scanner scanner = new Scanner(System.in);
        score = scanner.nextInt();

        switch (score/10){
            case 10: // fall-through!
            case 9:
                grade = 'A';
                break;
            case 8:
                grade = 'B';
                break;
            default:
                grade = 'F';
        }
        System.out.println("성적 : " + grade);
    }
}

// 결과
점수를 입력하세요
89
성적 : B
  • 문자열 조건

    2. 반복문 (for, while, do-while)

  • String money = "January"; switch (month) case "March": System.out.println("봄이다아"); break; case "January": System.out.println("겨울이다아");
  • 반복문도 마찬가지로 C와 유사하다.
  • continue, break 사용가능, goto 문법은 없음
// 기본 for 문법
for (int i=1; i<=5; i+){
...
}

// foreach 스타일 문법
// enhanced for statement
for (타입 변수명 : 배열 또는 컬렉션){
..
}

while (조건식){
...
}

do {
...
} while (조건식);
  • break 문
    • 반복문 안에 break 만나면 가장 근접한 반복문 탈출
  • continue 문
    • 반목문 안에 continue 만나면 continue 아래 명령어 실행하지 않고 반복문 조건으로 돌아감
  • break <라벨>;
    • goto 문 처럼 해당 위치로 break 점프할 수 있음
    • 반복문 바로 옆에 작성해도 되고, 그 위에 작성해도 됨
    • // 두 번째 while 문 안에서 break Done를 만나면 // 가장 첫 번째 while(1) 종료로 넘어간다. // 더이상 반복하지 않고 "break Done;" 출력한다. Done: while (1){ while (1) { ... break Done; } ... } System.out.println("break Done;");

    Done:
    while (1){}
    System.out.println("break Done;");
  • while (1) { ... break Done; } ...

Quiz😁

  • 다음 문제를 JAVA로 풀어주세요.
  • 조건식으로 표현해주세요..
// 1. int형 변수 x가 10보다 크고 20보다 작을 때 true인 조건식

// 2. char 형 변수 ch가 공백이나 탭이 아닐 때 true인 조건식

// 3. char 형 변수 ch가 ‘x' 또는 ’X' 일 때 true인 조건식

// 4. char형 변수 ch가 숫자('0' ~ '9')일 때 true인 조건식

// 5. char형 변수 ch가 영문자(대문자 or 소문자)일 때 true 조건식

// 6. int형 변수 year가 400으로 나눠떨어지거나 또는 4로 나눠떨어지고 100으로 나눠떨어지지 않을 때 true인 조건식

// 7. boolean형 변수 power0n가 false일 때 true인 조건식

// 8. 문자열 참조변수 str이 "yes" 일 때 true인 조건식
Answer
// 1. int형 변수 x가 10보다 크고 20보다 작을 때 true인 조건식
x > 10 && x < 20

// 2. char 형 변수 ch가 공백이나 탭이 아닐 때 true인 조건식
ch != ' ' || ch != '\t'
(ch == ' ' || ch == '\t')

// 3. char 형 변수 ch가 ‘x' 또는 ’X' 일 때 true인 조건식
ch == 'x' || ch == 'X')

// 4. char형 변수 ch가 숫자('0' ~ '9')일 때 true인 조건식
ch >= '0' && ch <= '9'

// 5. char형 변수 ch가 영문자(대문자 or 소문자)일 때 true 조건식
(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')

// 6. int형 변수 year가 400으로 나눠떨어지거나 또는 4로 나눠떨어지고 100으로 나눠떨어지지 않을 때 true인 조건식
(year % 400 == 0) || ((year % 4 == 0) && year % 100 != 0))

// 7. boolean형 변수 power0n가 false일 때 true인 조건식
power0n == false
!power0n

// 8. 문자열 참조변수 str이 "yes" 일 때 true인 조건식
str.equals("yes")
"yes".equals(str)

  • 1부터 20까지의 정수 중에서 2 or 3의 배수가 아닌 수의 총합을 구하시오
Answer
package com.kukim;

public class Main{
    public static void main(String[] args){
        int result = 0;

        for (int i = 1; i < 21; i++){
            if (i % 2 != 0 || i % 3 != 0)
                result += i;
        }
        System.out.println(result);
    }
}

// 출력 결과
73

  • 1 + (1+2) + (1+2+3)+ (1+2+3+4) + ... + (1+2+ ... + 10)의 결과를 계산하시오
Answer
// 풀이 1
package com.kukim;

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

        for (int i = 0; i < 11; i++) {
            sum += i;
            result += sum;
        }
        System.out.println(result);
    }
}

// 풀이 2
package com.kukim;

public class Main{
    public static void main(String[] args){
        int result = 0;

        for (int i = 1; i < 11; i++) {
            for (int j = 1; j < i + 1; j++) {
                result += j;
            }
        }
        System.out.println(result);
    }
}

// 출력 결과
220

  • 1+(-2)+3+(-4)+... , 과 같은 식으로 계속 더해나갔을 때 몇까지 더해야 총합이 100이상이 되는지 구하시오.
Answer
package com.kukim;

public class Main{
    public static void main(String[] args){
        int sum = 0; // 총합을 저장할 변수
        int s = 1; // 값의 부호를 바꿔주는데 사용할 변수
        int num = 0;
// true . 조건식의 값이 이므로 무한반복문이 된다
        for(int i=1;true; i++, s=-s) { // s 1, -1, 1, -1... 매 반복마다 의 값은
            num = s * i; // i (s) . 와 부호 를 곱해서 더할 값을 구한다
            sum += num;
            if(sum >=100) // 100 . 총합이 보다 같거나 크면 반복문을 빠져 나간다
                break;
        }
        System.out.println("num="+num);
        System.out.println("sum="+sum);
    }
}

  • 다음의 for문을 while 문으로 변경하시오
Answer

package com.kukim;

public class Main {
    public static void main(String[] args) {
        for (int i = 0; i <= 10; i++) {
            for (int j = 0; j <= i; j++)
                System.out.print("*");
            System.out.println();
        }
    }
}

package com.kukim;

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

        while (i <= 10) {
            int j = 0;
            while (j <= i) {
                System.out.print("*");
                j++;
            }
            System.out.println();
            i++;
        }
    }
}

  • 두 개의 주사위를 던졌을 때, 눈의 합이 6이 되는 모든 경우의 수를 출력하는 프로그램을 작성하시오
Answer
package com.kukim;

public class Main {
    public static void main(String[] args) {
        for (int i = 1; i < 7; i++) {
            for (int j = 1; j < 7; j++) {
                if ((i + j) == 6)
                    System.out.println("(" + i + " "+ j + ")");
            }
        }
    }
}

  • Math.random()을 이용해서 1부터 6사이의 임의의 정수를 변수 value에 저장하는 코드를 완성하라. (1)에 알맞는 코드를 넣으시오.
Answer
// Math.random() 함수는 0.0 ~ 1.0 사이의 실수 랜덤
// 1 ~ 6 사이 수 출력하려면 range = Max - min + 1 를 곱한 다음 + 1
package com.kukim;

public class Main {
    public static void main(String[] args) {
        int value = (int)(Math.random() * 6) + 1;
        System.out.println("value:"+value);
    }
}

  • 방정식 2x + 4y = 10의 모든해를 구하시오. 단, x, y는 정수이고 범위는 0≤x,y≤10 이다.
Answer
package com.kukim;

public class Main {
    public static void main(String[] args) {
        for (int x = 0; x < 11; x++) {
            for (int y = 0; y < 11; y++) {
                if (2 * x + 4 * y == 10) {
                    System.out.println("x=" + x + ", y=" + y);
                }
            }
        }
    }
}

Reference 🌏

'☕️ JAVA' 카테고리의 다른 글

📕 소프트웨어의 품질과 그 특성들  (0) 2022.01.08
JAVA의 클래스  (0) 2021.11.01
JAVA의 연산자  (0) 2021.11.01
JAVA의 변수와 타입  (0) 2021.11.01
JAVA의 컴파일과 실행  (1) 2021.11.01

댓글