Posts :coffee: [Java] 이것이 자바다 #4: 조건문과 반복문
Post
Cancel

:coffee: [Java] 이것이 자바다 #4: 조건문과 반복문

조건문과 반복문

switch문

  • 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.
  • if문은 조건식의 결과가 true/false 두 가지 밖에 없기 때문에 경우의 수가 많아질 수록 else-if 를 반복적으로 추가해야 하므로 코드가 복잡해진다. 그러나 switch문은 변수의 값에 다라 실행문이 결정되기 때문에 같은 기능의 If문보다 코드가 간결하다.
  • 괄호 안의 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킨다. default는 생략 가능하다.
  • 괄호 안에 올 수 있는 것
    • 정수 타입(byte, char, short, int, long)
    • 정수값을 산출하는 연산식
    • String 타입의 변수 (Java 7부터)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class SwitchStringExample {
    public static void main(String[] args) {
        String position = "과장";
        
        switch(position) {
            case "부장":
                System.out.println("700만원");
                break;
            case "과장":
                System.out.println("500만원");
                break;
            default:
                System.out.println("300만원");
        }
    }
}

반복문

  • for문과 while문은 서로 변환이 가능하다.
  • for문: 반복 횟수를 알고 있을 때 사용
  • while문: 조건에 따라 반복할 때 사용

for문

  • 초기화식을 생략할 수 있다.
1
2
int i = 1;
for (; i < 100; i++) {}
  • 초기화식과 증감식은 둘 이상 올 수 있다. 이 경우 쉼표로 구분하여 작성한다.
1
for (int i = 0, j = 100; i <= 50 && j > 50; i++, j--)
  • 초기화식에 선언된 변수는 for 블록 내부에서 사용되는 로컬 변수이다.
  • 초기화식에서 루프 카운트 변수를 선언할 때 부동소수점 타입을 사용하면 안 된다.
    • 다음의 예제에서 이론적으로 for문은 10번 실행되어야 한다.
    • 그러나 실제로는 9번만 실행된다.
    • 0.1은 float 타입으로 정확하게 표현할 수 없기 때문에 x에 더해지는 실제 값은 0.1보다 약간 크다. 결국 루프는 9번만 실행된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ForFloatCounterExample {
    public static void main(String[] args) {
        for (float x = 0.1f; x <= 1.0f; x+=0.1f) {
            System.out.println(x);
        }
    }
}

// 실행결과
//0.1
//0.2
//0.3
//0.4
//0.5
//0.6
//0.70000005
//0.8000001
//0.9000001
  • 중첩 for 문
1
2
3
4
5
6
7
8
9
10
11
// 구구단
public class ForMultiplicationTableExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
      	System.out.println("**** " + i + "단 ****");
            for (int j = 1; j <= 9; j++) {
        		System.out.println(i + " x " + j + " = " + i * j);
      		}
    	}
    }
}

while문

  • 키보드로 while문 제어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Main {
  public static void main(String[] args) throws Exception {
    boolean run = true;
    int speed = 0;
    int keyCode = 0;

    while (run) {
      if (keyCode != 13 && keyCode == 10 || keyCode == 0) {
        System.out.println("-----------------------");
        System.out.println("1. 증속 | 2. 감속 | 3. 중지");
        System.out.println("-----------------------");
        System.out.print("선택: ");
      }

      keyCode = System.in.read(); // 키보드의 키 코드를 읽어옴

      if (keyCode == 49) {
        speed++;
        System.out.println("현재 속도: " + speed);
      } else if (keyCode == 50) {
        speed--;
        System.out.println("현재 속도: " + speed);
      } else if (keyCode == 51) {
        run = false;
      }
    }
    System.out.println("프로그램 종료");
  }
}

keyCode 값은 아스키 코드와 같다.

do while문

  • 블록 내부의 실행문을 우선 실행시키고 실행 결과에 따라서 반복 실행을 계속할 지 결정해야 하는 경우 do while문을 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;

public class DoWhileExample {
    public static void main(String[] args) {
        System.out.println("메시지를 입력하세요.");
        System.out.println("프로그램을 종료시키고 싶으면 q을 누르세요,");
        
        Scanner sc = new Scanner(System.in);
        String inputString;
        
        do {
            System.out.print(">");
            inputString = sc.next();
            System.out.println(inputString);
        } while (!inputString.equals("q"));
    }
}

break

  • 중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 라벨을 붙이고 break 라벨;을 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 입력한 값의 단까지 출력하는 구구단
public class BreakOutterExample {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("몇 단까지 출력하시겠습니까? >");
    int n = sc.nextInt();
    loop: for (int i = 1; i <= 9; i++) {
      for (int j = 1; j <= 9; j++) {
        if (i == n + 1)
          break loop;
        System.out.println(i + " x " + j + " = " + i * j);
      }
      System.out.println();
    }
  }
}

확인문제

3번: 1부터 100까지의 정수 중 3의 배수의 총합을 구하는 코드

1
2
3
4
5
6
7
8
9
10
11
12
public class Exercise03 {
  public static void main(String[] args) {
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
      if (i % 3 != 0)
        continue;
      sum += i;
    }
    System.out.println("3의 배수의 합: " + sum);
  }
}

4번: 주사위 눈의 합이 5가 나올 때까지 계속 던지는 코드

1
2
3
4
5
6
7
8
9
10
11
public class Exercise04 {
  public static void main(String[] args) {
    int x = 0;
    int y = 0;
    while (x + y != 5) {
      x = (int) (Math.random() * 6) + 1;
      y = (int) (Math.random() * 6) + 1;
      System.out.printf("(%d, %d)\n", x, y);
    }
  }
}

5번: 방정식 4x + 5y = 60의 해 구하는 코드

1
2
3
4
5
6
7
8
9
10
public class Exercise05 {
  public static void main(String[] args) {
    for (int x = 1; x <= 10; x++) {
      for (int y = 1; y <= 10; y++) {
        if (4 * x + 5 * y == 60)
          System.out.printf("(%d, %d)\n", x, y);
      }
    }
  }
}

6번: 별찍기

1
2
3
4
5
6
7
8
9
10
public class Exercise06 {
  public static void main(String[] args) {
    for (int i = 1; i <= 5; i++) {
      for (int j = 1; j <= i; j++) {
        System.out.print("*");
      }
      System.out.println();
    }
  }
}

7번: 예금, 출금, 조회, 종료 기능을 제공하는 프로그램

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Scanner;

public class Exercise07 {
  public static void main(String[] args) throws Exception {
    boolean run = true;
    int balance = 0;
    Scanner scanner = new Scanner(System.in);

    loop: while (run) {
      System.out.println("--------------------");
      System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료");
      System.out.println("--------------------");
      System.out.print("선택 >");
      int n = scanner.nextInt();
      switch (n) {
        case 1:
          System.out.print("예금액>");
          balance += scanner.nextInt();
          break;
        case 2:
          System.out.print("출금액>");
          balance -= scanner.nextInt();
          break;
        case 3:
          System.out.println("잔고>" + balance);
          break;
        case 4:
          break loop;
      }
    }
    System.out.println("프로그램을 종료합니다.");
  }
}

This post is licensed under CC BY 4.0 by the author.

[Java] 백준 #2941: 크로아티아 알파벳

[JS] 생활코딩 #26: 표준 내장 객체의 확장

Loading comments from Disqus ...