코드 실행 흐름 제어
- 자바 프로그램을 시작하면 main() 메소드의 시작 중괄호 { 에서 시작해서 끝 중괄호 } 까지 위에서부터 아래로 실행하는 흐름올 가지고 있음
- 이러한 실행 흐름을 개발자가 원하는 방향으로 바꾸 수 있도록 해주는 것이 흐름 제어문임
- 흐름 제어문은 제어문이라고 한다.
제어문은 조건식과 중괄호 {} 블록으로 구성
조건식의 연산 결과에 따라 블록 내부의 실행 여부가 결정됨 - 제어문의 종류는 조건문과 반복문이 있음
조건문: if문, switch문
반복문: for문, while문, do-while문 - 제어문 블록 내부에는 또 다른 제어문을 사용할 수 있음
조건문(if문, switch문)
if문
- 조건식의 결과에 따라 블록 실행 여부가 결정됨
- 조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나, boolean 변수가 올 수 있음
- 조건식이 true이면 블록을 실행하고 false이면 블록을 실행하지 않음
package thisisjava.chap04.num02;
public class IfExample {
public static void main(String[] args) {
int score = 93;
if (score >= 90) {
System.out.println("점수가 90보다 큽니다");
System.out.println("등급은 A 입니다");
}
if (score < 90)
System.out.println("점수가 90보다 작습니다");
System.out.println("등급은 B 입니다"); //if문과는 상관없는 실행문
}
}
> 조건식이 true가 될 때 실행해야 할 문장이 하나밖에 없다면 생략할 수 있다
> 중괄호 블록을 작성하지 않으면 코드의 가독성(코드 해석)이 좋지 않고, 버그 발생의 원인이 될 수 있음
> 그래서 중괄호 블록 {} 생략하지 않고 작성하는 것을 추천
if-else문
- 조건식의 결과에 따라 실행 블록을 선택
- if문의 조건식이 true이면 if문의 블록이 실행되고, 조건식이 false이면 else 블록이 실행됨
package thisisjava.chap04.num02;
public class IfElseExample {
public static void main(String[] args) {
int score = 85;
if (score >= 90) {
System.out.println("점수가 90보다 큽니다");
System.out.println("등급은 A입니다");
} else {
System.out.println("점수가 90보다 작습니다");
System.out.println("등급은 B입니다");
}
}
}
if-else if-else문
- 모든 조건식이 false일 경우 else 블록을 실행하고 if문을 벗어나게 됨
package thisisjava.chap04.num02;
public class IfElseIfElseExample {
public static void main(String[] args) {
int score = 75;
if (score >= 90) {
System.out.println("점수가 100-90입니다");
System.out.println("등급은 A입니다");
} else if (score >= 80) {
System.out.println("점수가 80-89입니다");
System.out.println("등급은 B입니다");
} else if (score >= 70) {
System.out.println("점수가 70-79입니다");
System.out.println("등급은 C입니다");
} else {
System.out.println("점수가 70 미만입니다");
System.out.println("등급은 D입니다");
}
}
}
주사위
- 주사위를 굴려서 나올 수 있는 1,2,3,4,5,6 중에서 하나의 수를 뽑아서 출력하는 프로그램 작성
- Math.random() 메소드를 활용
0.0과 1.0 사이에 속하는 double 타입의 난수 하나를 리턴
0.0은 범위에 포함되고 1.0은 포함되지 않음
// 비교연산자로 표현
0.0 <= Math.random() < 1.0
// 각 변에 10을 곱해 double 타입의 값을 얻음
0.0*10 <= Math random()*10 < 1.0*10
0.0 10.0
// 각 변을 int 타입으로 강제 타입 변환
(int) 0.0 < = (int) (Math.random()*10) < (int) 10.0
(0) (0,1,2,3,4,5,6,7,8,9) (10)
// 이 상태에서 각 변에 1을 더하면 1~10까지 정수 중에서 하나의 정수를 얻게 됨
0+1 <= (int) (Math.random()*10)+1 < 10+1
(1) (1,2,3,4,5,6,7,8,9,10) (11)
// start부터 시작하는 n개의 정수 중에서 임의의 정수 하나를 얻기 위한 연산식
int num = (int) (Math.random()*n) + start;
// 주사위 번호 하나를 뽑기 위한 연산식
int num = (int) (Math.random()*6) + 1;
// 로또 번호 하나를 위해 다음 연산식 사용
int num = (int) (Math.random()*45) + 1;
package thisisjava.chap04.num02;
public class IfDiceExample {
public static void main(String[] args) {
int num = (int) (Math.random() * 6) + 1;
if (num == 1) {
System.out.println("1번이 나왔습니다");
} else if (num == 2) {
System.out.println("2번이 나왔습니다");
} else if (num == 3) {
System.out.println("3번이 나왔습니다");
} else if (num == 4) {
System.out.println("4번이 나왔습니다");
} else if (num == 5) {
System.out.println("5번이 나왔습니다");
} else {
System.out.println("6번이 나왔습니다");
}
}
}
중첩 if문
- if문의 블록 내부에는 또 다른 if문을 사용할 수 있음
package thisisjava.chap04.num02;
public class IfNestedExample {
public static void main(String[] args) {
int score = (int) (Math.random() * 20) + 81;
System.out.println("점수: " + score);
String grade;
if (score >= 90) {
if (score >= 95) {
grade = "A+";
} else {
grade = "A";
}
} else {
if (score >= 85) {
grade = "B+";
} else {
grade = "B";
}
}
System.out.println("학점: " + grade);
}
}
switch문
- if문과 마찬가지로 조건 제어문
- 변수가 어떤 값을 갖느냐에 따라 실행문이 선택됨
- if문보다 코드가 간결
package thisisjava.chap04.num02;
public class SwitchExample {
public static void main(String[] args) {
int num = (int) (Math.random() * 6) + 1;
switch (num) {
case 1:
System.out.println("1번이 나왔습니다");
break;
case 2:
System.out.println("2번이 나왔습니다");
break;
case 3:
System.out.println("3번이 나왔습니다");
break;
case 4:
System.out.println("4번이 나왔습니다");
break;
case 5:
System.out.println("5번이 나왔습니다");
break;
default:
System.out.println("6번이 나왔습니다");
break;
}
}
}
> case 끝에 break가 붙어 있는 이유는 다음 case를 실행하지 말고, switch문을 빠져나가기 위해서임
// break문이 없는 case
package thisisjava.chap04.num02;
public class SwitchNoBreakCaseExample {
public static void main(String[] args) {
int time = (int) (Math.random() * 4) + 8;
System.out.println("[현재시간: " + time + " 시]");
switch (time) {
case 8:
System.out.println("출근합니다");
case 9:
System.out.println("회의를 합니다");
case 10:
System.out.println("업무를 봅니다");
default:
System.out.println("외근을 나갑니다");
}
}
}
> break가 없다면 다음 case가 연달아 실행됨
> case 값과는 상관없이 실행됨
// char 타입의 Switch문
package thisisjava.chap04.num02;
public class SwitchCharExample {
public static void main(String[] args) {
char grade = 'B';
switch (grade) {
case 'A':
case 'a':
System.out.println("우수 회원입니다");
break;
case 'B':
case 'b':
System.out.println("일반 회원입니다");
break;
default:
System.out.println("손님입니다");
}
}
}
// String 타입의 switch문
package thisisjava.chap04.num02;
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만원");
}
}
}
> 자바 7부터는 String 타입의 변수도 올 수 있음
'이것이 자바다' 공부 기록
300x250
'Language > JAVA' 카테고리의 다른 글
[JAVA] 참조 타입 // String 배열 열거 (0) | 2021.09.16 |
---|---|
[JAVA] 반복문 // for문 while문 do-while문 break문 continue문 (0) | 2021.09.15 |
[JAVA] 연산자와 연산식 2 // 이항연산자 삼항연산자 (0) | 2021.09.13 |
[JAVA] 연산자와 연산식 1 // 단항연산자 이항연산자 (0) | 2021.09.12 |
[JAVA] 데이터 타입 변환 // 자동타입변환 강제타입변환 연산식타입변환 (0) | 2021.09.11 |