for
while
이 둘은 반복 실행문(이하 반복문)이라고 부른다.
사용 양식은 다음과 같다
for( ; ; ){
//반복시킬 명령
}
괄호( )안에 반복의 횟수를 조절할수 있는 문구들를 ';' 으로 구분해서 입력하고
그리고 그 조절된 횟수만큼 { }안의 내용을 반복 실행한다.
위의 예제처럼 아무런 조건도 넣지 않을 경우 무한 루프가 발생한다.
1부터 10까지의 숫자를 곱하는 행위를 for문으로 표현해본다면
int i, a=1;
for(i = 1; i <= 10; i++){
a *= i;
}
이런 식으로 표현할 수 있겠다 (이 코드가 정답은 아니고 그냥 예제일 뿐입니다.)
그렇다면 이 코드를 볼 때
i와 a라는 변수가 존재하고, i가 1에서부터 10까지 무엇인가를 하는 명령이겠구나
라는 생각을 할 수 있다.
이는 for문을 선언할 때나 코드를 해석할 때 구조적인 파악을 좀 더 쉽고 빠르게 할 수 있다는 장점으로 작용한다.
그러면 1부터 10까지의 숫자를 곱하는 행위를 while문으로 표현해보자.
int i = 1, a = 1;
while( i<=10 ) {
a *= i;
i++;
}
줄 수는 더 길어진 것처럼 보이지만
while문은 for문에 비하여 선언할 때는 조건만 확실히 하면 돼서 그 점은 더 간편하다고 할 수 있다.
while문은 확실히 i<=10 이라는 조건이 잘 보인다.
조건만 참이라면 계속해서 반복을 하기 때문에 for문에 비하여 더 간편한 점도 존재한다.
이는 while의 장점으로 작용한다.
while에 넣는 조건으로 true 혹은 1을 넣으면 무한히 반복하게 된다.
// 입력 받은 정수의 구구단을 출력하는 문구
int a;
Scanner sc = new Scanner(System.in);
while(true) { // true 대신에 1을 넣어도 된다.
System.out.printf("출력할 단을 입력하세요(끝내려면 0 입력) : ");
dan = sc.nextInt();
if(a == 0) break; // 0을 입력하면 반복이 끝나지만,
int i = 1; //0을 입력하지 않으면 계속 위로 돌아가서 단 입력부터 반복하게 됩니다.
while(i<=9) {
System.out.printf(" %d x %d = %d\n", a, i, a*i);
i++;
}
}
System.out.println("프로그램이 종료됩니다");
하지만 동시에 생기는 단점으로는
적절한 시기, 혹은 적절한 데이터를 정확하게 사용해야한다는 점이 있다.
1. for와 while의 장단점
(1) for의 장점과 단점
장점 : 선언시 혹은 코드 읽을 때 그 구조를 좀 더 확실하게 구상할 수 있다.
단점 : while에 비해 코드가 길어지고 더러워질 가능성이 높다.
(2) while의 장점과 단점
장점: for에 비해 구문이 간결하고 조건 중심으로 코드를 짤때에는 강력하다.
단점: 좀 더 정교하고 정확하게 시기와 데이터를 파악해서 사용해야만한다.
반복문에 사용되는 break나 continue 등은 둘다 공통적으로 사용할 수 있다.
break나 continue는
"특정한 조건을 만나면 반복을 끝내라"는 뜻이라고 보면 된다.
1부터 특정한 정수까지 짝수의 합을 출력하는 과정을 예제로 그 둘을 비교해보려고 한다.
// i가 1부터 10까지 늘어나면서 i가 홀수일 경우에는 밑에 실행해야하는 조건들을 실행하지 않고
// 바로 i에 +1을 한 다음 조건으로 들어갑니다.
sum = 0;
for(i=1; i<=10; i++) {
if( i%2 == 1)
continue; // 반복실행안에서 남아있는 아래 명령들을 실행하지 않고 다음 반복으로 이어지는 명령
sum = sum + i;
System.out.println("1부터 " + i + "까지의 합 : " + sum);
}
// i가 100까지 반복하게 되어 있지만 특정한 조건을 만족하면 100이 되어버리기 전에 반복이 종료됩니다.
sum = 0;
for(i=0; i<=100; i+=2) {
if( i == 12)
break; // 특정 조건이 되었을 때 가장 가까운 반복문을 종료해버리는 명령
sum = sum + i;
System.out.println("1부터 " + i + "까지의 합 : " + sum);
}
둘 모두 1부터 10까지의 합은 30으로 정상출력되는 모습을 볼 수 있다.
추가적으로 주의해야할게 있다면
이중 for문으로 반복을 실행할 경우 break를 사용했을 때
반복문 전체가 끝나는게 아니라,
break를 중괄호로 감싸고 있는 반복만 종료된다는 점이다.
for( ; ; ){
for( ; ; ){
break; // 여기에 break를 사용할 경우 가장 가까운 for문만 종료되며
}
// 바깥의 for문은 계속 돌아가게 됩니다.
}
'코딩이야기 > JAVA' 카테고리의 다른 글
[JAVA] java.lang.NullPointerException 에러 (0) | 2022.10.31 |
---|---|
[Java] class 클래스에서 생성자(Constructor)와 this의 사용(1) (0) | 2022.10.12 |
[연습문제 풀이] programmers 코딩테스트 연습 옹알이 문제 풀이 (0) | 2022.10.06 |
[연습문제] 피자 나눠 먹기, while문, 나눗셈(나누기) 연산("/") (2) | 2022.10.05 |
[Java] compareTo와 equals의 반환값 (0) | 2022.09.30 |