✍ Today I Learned
- 예제 문제를 풀어보면서 제어문은 하나의 답이 아닌 여러 방향이 있다는 걸 또 한번 깨달았다.
- 항상 효율적인 방향이 무엇인지 고민하고 코드를 구현하자!
04 조건문과 반복문
04-1 조건문: if문, switch문
조건문의 종류
- if문
- 조건식의 결과가 true, false이냐에 따라 실행문 결정
- 주로 else 블록과 함께 사용
- switch문
- 변수의 값에 따라 실행문 결정
- default는 생략 가능
- break가 없다면 다음 case 연달아 실행
- switch 연산은 char 타입, String 타입도 가능하다
중괄호 {} 블록
- 여러 개의 실행문을 하나로 묶기 위해 중괄호 {} 사용
- 조건식이 true가 될 때 실행해야 할 문장이 하나밖에 없다면 생략 가능
- 그러나 코드의 가독성을 고려하여 작성하는 것을 추천
if (조건식) {
실행문;
실행문;
...
}
// 중괄호 생략 가능하나 비추천
if (조건식)
실행문;
정수 무작위수(난수) 출력 방법
- Math.random() 메서드 활용
- 0.0과 1.0 사이에 속하는 double 타입의 난수를 하나 리턴
- 0.0은 포함, 1.0은 미포함
- 각 변에 10을 곱하여 다음과 같은 범위의 double 타입 값을 얻는다.
0.0 * 10 <= Math.random() * 10 < 1.0 * 10
- 각 변을 int 타입으로 강제 타입 변환하여 하나의 정수 값을 얻는다.
(int)0.0 <= (int)(Math.random() * 10) < (int)10.0
- 각 변에 1을 더하여 1~10 사이의 범위에서 하나의 정수 값을 얻는다.
0 + 1 <= (int)(Math.random() * 10) + 1 < 10 + 1
- 이 원리를 이용하여 start부터 시작하는 n개의 정수 중에서 임의의 정수 하나를 얻는 연산식을 만들 수 있다.
int num = (int)(Math.random() * n) + start;
- 예를 들어 주사위 번호 하나 뽑기를 한다면?
int num = (int)(Math.random() * 6) + 1;
04-2 반복문: for문, while문, do-while문
반복문의 종류
- for문
- 반복 횟수를 알고 있을 때 주로 사용
- while문
- 조건에 따라 반복할 때 주로 사용
- do-while문
- while문과의 차이점은 조건을 먼저 검사하느냐 나중에 검사하느냐 차이
for문의 초기화식이 둘 이상인 경우
- 초기화식, 증감식 모두 둘 이상 있을 수 있다.
- 다음과 같이 쉼표로 구분해서 작성한다.
for (int i=0, j=100; i<=50 && j>=50; i++, j-- { ... }
for문 안의 변수
- 초기화식에 선언된 변수는 for문 블록 내부에서 사용되는 로컬 변수이다.
- for문을 벗어나서 사용할 수 없다.
- 변수 i를 초기화식에서 선언하지 않고 for문 전에 선언하면 for문 외부에서도 사용할 수 있다.
for문에서 주의할 점
- 초기화식에서 루프 카운터 변수를 선언할 때 부동 소수점을 쓰는 float 타입은 사용하지 말아야 한다.
package chap04.sec02.exam04;
public class ForFloatCounterExample {
public static void main(String[] args) {
for (float x = 0.1f; x <=1.0f ; x+=0.1f) {
System.out.println(x);
}
//x에 실제 더해지는 값은 0.1보다 약간 크기 때문에 9번만 실행
//0.1
//0.2
//0.3
//0.4
//0.5
//0.6
//0.70000005
//0.8000001
//0.9000001
}
}
중첩 for문으로 구구단 출력하기
package chap04.sec02.exam05;
public class ForMultiplicationTableExample {
public static void main(String[] args) {
for (int m=2; m<=9; m++){
System.out.println("*** " + m + "단 ***");
for (int n = 1; n <= 9; n++) {
System.out.println(m + " x " + n + " = " + (m*n));
}
}
}
}
break문
- 대개 if문과 같이 사용되어 if문의 조건식에 따라 반복문의 실행을 종료할 때 사용
- 가장 가까운 반복문만 종료
- 중첩된 반복문에서 바깥 반복문까지 종료시키려면 바깥쪽 반복문에 이름(라벨)을 붙이고, ‘break 이름;’을 사용
package chap04.sec02.exam09;
// 중첩된 for문에서 lower 변수가 'g'를 갖ㅈ게 되면 바깥쪽 for문 break
public class BreakOutterExample {
public static void main(String[] args) {
Outter:for (char upper='A'; upper<='Z' ; upper++) {
for (char lower='a'; lower<='z'; lower++) {
System.out.println(upper + "-" + lower);
if (lower == 'g') {
break Outter;
}
}
}
System.out.println("프로그램 실행 종료");
}
}
continue문
- 반복문인 for문, while문, do-while문에서 continue문이 실행되면 for문의 증감식 또는 while문, do-while문의 조건식으로 이동
- 마찬가지로 대개 if문과 사용되는데, 특정 조건을 만족하는 경우 continue문을 실행해서 그 이후 문장을 실행하지 않고 다음 반복으로 이동
package chap04.sec02.exam10;
// 1에서 10사이의 수 중에서 짝수만 출력
public class ContinueExample {
public static void main(String[] args) {
for (int i = 1; i <=10; i++) {
if (i%2 != 0) {
continue;
}
System.out.println(i);
}
}
}
※ 이 내용은 책 [혼자 공부하는 자바]를 보고 정리한 내용입니다.
'📝 TIL' 카테고리의 다른 글
[TIL] Java 열거 타입(Enum) (4) | 2022.11.12 |
---|---|
[TIL] Java 참조 타입, 메모리 사용 영역, String, 배열 (4) | 2022.11.11 |
[TIL] 항해99 입학시험 (0) | 2022.11.09 |
[TIL] Java 연산자의 종류, 우선순위, 타입 변환 (2) | 2022.11.08 |
[TIL] Java 개발 환경 구축, 변수와 타입 (0) | 2022.11.07 |