JAVA쪼렙탈출기: 반복문
Python과 SQL만 써본 주니어 분석가. '개발공부를 해보고 싶다', '개발도 공부하긴 해야하는데...'는 말만 한지 어연 1년이 넘어가는 중, 이대로는 안되겠다 싶어 냅다 JAVA 수업 수강에 카드를 긁었다. 쪼렙 중의 쪼렙이 JAVA를 배워나가는 여정을 "JAVA 쪼렙 탈출기"라는 시리즈로 남길 예정이다.
반복문에는 for문과 while문이 있다.
for문
for ( 초기식; 조건식; 증감식 ) {
실행코드
}
- 초기식 : 반복 횟수를 카운트하는 변수의 선언(생성)과 초기값 설정. for문 실행과 동시에 최초 한 번만 실행
- 조건식 : 반복문 실행 확인
- 증감식 : 반복 횟수를 카운트하는 변수의 값을 증가 or 감소
1~30 사이의 5의 배수 출력
public class ForEx02 {
public static void main(String[] args) {
int n = 5;
for(int i=1 ; i<=30 ; i++) {
if(i%n == 0) {
System.out.println(i);
}
}
}
}
[결과값]
5
10
15
20
25
30
코드를 보다 간결하게 작성한다면 아래와도 같이 작성할 수 있다.
public class ForEx02 {
public static void main(String[] args) {
int n = 5;
for(int i=n ; i<=30 ; i+=n) {
System.out.println(i);
}
}
}
결과값은 첫 번째 코드와 동일하게 나온다.
1 ~ last까지 숫자의 합
public class ForEx03 {
public static void main(String[] args) {
// 방법1 : for 문
int last = 10;
int tot = 0;
for(int i=1 ; i<=last ; i++) {
tot += i;
}
System.out.println("1 ~ " + last + " 까지의 합 : " + tot);
// 방법2 : 수학공식 활용
tot = 0;
tot = (last + 1) * (last/2);
System.out.println("1 ~ " + last + " 까지의 합 : " + tot);
}
}
방법1과 방법2 모두 결과값은 동일하게 나온다. 하지만 방법1은 last번 만큼 연산이 돌아가야 결과값이 출력되지만, 방법2는 연산 횟수가 1번만에 결과값이 출력된다는 차이가 있다. 연산 횟수에 따라 출력속도에는 차이가 날 수밖에 없기 때문에, 항상 코드를 효율적으로 작성하려는 노력이 필요하다.
(1부터 5까지 가로로 출력) 을 3번 출력
public class ForEx05 {
public static void main(String[] args) {
// (1부터 5까지 가로로 출력)을 3번
for(int cnt=1 ; cnt<=3 ; cnt++) {
for(int i=1 ; i<=5 ; i++) {
System.out.print(i + " ");
}
System.out.println();
}
System.out.println();
}
}
}
[결과값]
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
이처럼 이중for문 또한 가능하다.
알파벳 대문자 A ~ Z까지 출력
public class QuizFor {
public static void main(String[] args) {
// 방법1 : 아스키코드 활용
for(int i=65 ; i<=90; i++) {
System.out.print((char)i + " ");
};
System.out.println();
// 방법2 : char 활용
for(char ch='A' ; ch<='Z' ; ch++) {
System.out.println(ch);
if(ch != 'Z') {
System.out.print(", "); // 맨 마지막 글자가 아니면 ,를 넣어라
}
}
System.out.println();
}
}
while문
while (조건식) {
실행코드
}
조건식이 true이면 while문 안의 코드가 실행된다. 조건식이 더이상 true가 아니면 코드가 실행되지 않고 while문 밖으로 빠져나와 하위 코드를 실행한다.
public class WhileEx01 {
public static void main(String[] args) {
int cnt = 1;
cnt = 1;
while(true) {
if(cnt >= 5) {
break;
}
System.out.println(cnt);
++cnt;
}
}
}
[결과값]
1
2
3
4
break는 switch뿐만 아니라 모든 제어문에서 사용 가능하다. while문은 자칫 잘못했다간 무한루프가 돌 수 있기 때문에 주의해야 한다.
do while문 (많이 쓰진 않는다.)
do {
실행코드
} while (조건식);
조건식이 true일 때 do문 안의 코드가 실행된다.
continue
현재 진행중인 반복문의 실행을 멈추고, 다음 반복을 진행한다.
continue가 있을 때와 없을 때의 결과값을 비교해보자.
1. continue가 없을 때
public class ControllAdd {
public static void main(String[] args) {
int step = 0;
while(step < 10) {
++step;
if(step%3==0) {
System.out.println("Jump");
}
System.out.println(step);
}
}
}
[결과값]
1
2
Jump
3
4
5
Jump
6
7
8
Jump
9
10
2. continue가 있을 때
public class ControllAdd {
public static void main(String[] args) {
int step = 0;
while(step < 10) {
++step;
if(step%3==0) {
System.out.println("Jump");
continue;
}
System.out.println(step);
}
}
}
[결과값]
1
2
Jump
4
5
Jump
7
8
Jump
10
continue가 있으면 3배수의 숫자가 출력되지 않는 걸 볼 수 있다. 이는 continue가 등장한 순간 아래의 코드들을 실행하지 않고 바로 다음 반복문으로 넘어가게 되기 때문에, 아래의 System.out.println(step); 이 실행되지 않기 때문이다.