조건문과 반복문
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
|
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문
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("프로그램을 종료합니다.");
}
}
|