현재까지는 main 메소드 이후 순서로 실행이 되었다.
그런데, 조건문을 사용하게 되면, 다르게 사용할 수 있다.
- 조건문(if/switch) : 조건을 만족할때만 {}를 수행(0~1번)
Ex) if (score > 60) {
System.out.println("합격입니다.");
System.out.println("축하드립니다.");
}- 반복문(for/while) : 조건을 만족하는 동안 {}를 수행(0~n번)
Ex) int i = 10;
while (i > 0) {
System.out.println(i);
}- 조건문과 반복문은 흐름을 제어하는 문장으로 "제어문"이라 한다.
조건식이 참(true)일 때, 괄호{}안의 문장들을 수행한다.
Ex) if (조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다.
} // 조건식이 참이면 실행, 거짓이면 실행하지 않고 다음으로 넘어간다.
Ex) if (score > 60) {
System.out.println("합격입니다.");
} // score가 60이상이면 "합격입니다."를 출력 / 그래서 연산결과가 true 또는 false만 가능
여러 문장을 하나로 묶어주는 것
- 코드의 가독성을 위해 탭에 의한 들여쓰기를 한다.
- 만약에 if문 안의 문장이 하나면 블럭이 생략 가능하다.
둘 중의 하나 - 조건식이 참일 때와 거짓일 때로 나눠서 처리
if(조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다.
} else {
// 조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}
여러 개 중의 하나 - 여러 개의 조건식을 포함한 조건식
if (조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
// 조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) { // 여러 개의 else if를 사용할 수 있다.
// 조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { // 마지막은 보통 else 블럭으로 끝나며, else 블럭은 생략 가능하다.
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
Ex)
if (조건식1) {
// 조건식1의 연산결과가 true일 때 수행될 문장들을 적는다.
if (조건식2) {
// 조건식 1과 조건식2가 모두 true일 때 수행될 문장들
} else {
// 조건식 1이 true이고, 조건식2가 false일 때 수행될 문장들
} else {
// 조건식1이 false일 때 수행되는 문장들
}
}
- 괄호를 조심해야 한다. (두 번째 if의 else가 첫 번째 if의 else로 보이지 않도록)
처리해야 하는 경우의 수가 많을 때 유용한 조건문
- 조건식을 계산한다.
- 조건식의 결과와 일치하는 case문으로 이동한다.
- 이후의 문장들을 수행한다.
- break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
- defalut문은 생략 가능하다.
- if문은 true 또는 false 값을 가지지만, switch문은 정수, 문자열의 값을 가진다.
- if-else if문은 조건식이 여러 개 나와야 하지만, switch문은 하나면 된다.
- switch문이 더 효율적이지만, 제약조건이 존재한다.
- switch문은 항상 if문으로 변경 가능하지만, if문은 무조건적으로 switch문으로 변경할 수 없다.
- switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
- case문의 값은 정수 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다. (변수 불가능)
Ex) int num, result;
final int ONE = 1;
...
switch(result) {
case '1': // ok. 문자 리터럴(정수 49와 동일)
case ONE: // ok. 정수 상수
case "YES": // ok. 문자열 리터럴. JDK 1.7부터 허용
case num: // 에러. 변수는 불가
case 1.0: // 에러. 실수도 불가
...
}
Math.random() - 0.0과 1.0 사이의 임의의 double 값을 반환
0.0 <= Math.random() < 1.0 (0.0 ~ 0.9999...의 사잇 값)
Ex) 1~3정수로 만들기 위해서
- 각 변에 3을 곱한다. (개별 값의 갯수)
0.0 3 <= Math.random() 3 < 1.0 3
0.0 <= Math.random() 3 < 3.0 (0.0 ~ 2.999...)
- 각 변을 int형으로 변환한다.
(int)0.0 <= (int)(Math.random() 3) (int)3.0
0 <= (int)(Math.random() 3) < 3 (0~2)
- 각 변에 1을 더한다.
0 + 1 <= (int)(Math.random() 3) + 1 < 3 + 1
1 <= (int)(Math.random() 3) + 1 < 4
조건을 만족하는 동안 블럭 {}을 반복 - 반복횟수를 알 때 적합
for문 내에 또 다른 for문을 포함시킬 수 있다.
Ex) for(int i=2;i<=9;i++) { for(int j=1;j<=9;j++) { System.out.println(i+"*"+j+"="+(i*j)); } }
Ex) 같은 수의 별들 그리기
for(int i =1;i<=5;i++) { // System.out.println("**********"); for(int j=1;j<=10;j++) { System.out.print("*"); } System.out.println(); }
Ex) 다른 수의 별들 그리기for(int i =1;i<=10;i++) { // System.out.println("**********"); for(int j=1;j<=i;j++) { System.out.print("*"); } System.out.println(); }
조건을 만족시키는 동안 블럭{}을 반복 - 반복횟수 모를 때
- 반복횟수를 알 때는 for문 / 반복횟수를 모를 때는 while문
Ex) while (조건식) {
// 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
- for문과 while문은 언제든지 변경 가능하다.
블럭{}을 최소한 한 번 이상 반복 - 사용자 입력받을 때 유용
Ex) do {
// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.(처음 한 번은 무조건 실행)
} while(조건식); <- 끝에 ';'을 잊지 않도록 주의!