반복제어문 + 보충
while문은 지정된 횟수가 없는 경우에 주로 사용되고, 무한루프를 돌리는 데에 사용된다.
네트워크 서버나 데이터베이스, 파일 읽기 등에 활용할 수 있다.
- break : switch문 또는 반복문에서만 사용할 수 있고, 반복문을 중단하는 역할을 한다.
⇢ break 아래에 있는 코드는 실행되지 않는다.
무한 루프는 반드시 종료 시점을 정해주어야 한다. (System.exit(0)으로도 가능하다.) - continue : 반복문에서만 사용이 되고, 특정 부분을 제외한다.
package breakEx;
public class breakEx1 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("i=" + i);
break; //for문 종료
}
System.out.println("-----i 출력 끝-----");
for (int j = 1; j <= 10; j++) {
if (j == 3 || j == 4 || j == 5)
continue; // 위 if조건 만족할 때만 제외하고 for문 실행
System.out.println("j=" + j);
}
System.out.println("-----j 출력 끝-----");
}
}
연습문제 1
어제 for문 관련 풀었던 연습문제를 while을 사용해서 다시 풀었다.
그냥 간단하게 1부터 100까지 짝수들의 합을 구하는 문제↓
package whileLoop;
public class No3 {
// 2+4+6+....100까지의 정수의 합을 구하고 출력하라 (while 사용)
public static void main(String[] args) {
int sum = 0;
int i = 0;
while (i <= 100) {
if (i % 2 != 0) {
continue;
}
sum += i;
i++;
}
System.out.println(sum);
}
}
코드를 이렇게 짜니까.. 루프가 끝나질 않았다.
System.out.println(i)를 찍어 봐도 1만 찍히고 그 이후로는 맥북만 팽팽 돌아갈 뿐 끝나지 않았음..
다시 보니 내가 continue에 대해 잘못 이해하고 있어서 그런 거였다.
if문 내에 continue를 사용하면 해당 블럭 밖에 있는 코드들은 실행할 줄 알았는데,
그냥 바로 i<=100을 검사하는 곳으로 넘어가는 거였음.
그러니까... i가 0에서 1이 된 이후에는...
i는 100 이하임을 검사 → i(=1)를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → ...(무한반복)... 이러고 있었던 셈이다.
마침 비슷한 문제에 대한 풀이 글이 있더라.. 링크
단순히 i++의 자리를 옮겨 주는 것으로 해결됐다.
package whileLoop;
public class No3 {
// 2+4+6+....100까지의 정수의 합을 구하고 출력하라 (while 사용)
public static void main(String[] args) {
int sum = 0;
int i = 0;
while (i <= 100) {
i++;
if (i % 2 != 0) {
continue;
}
sum += i;
}
System.out.println(sum);
}
}
단, i++의 위치에 따라 조건 검사 후 i++이 실행되고 나서 출력문을 만나는지 등을 고려해서 짜야 할 듯.
다른 문제에서 1부터 10까지 더한 값을 구하려고 했는데 i++이 위에 있으니까 1부터 11까지 더해져버림...
이것도 출력문의 위치를 옮기거나 해서 조절은 가능하지만.. 아무튼 주의할 건 주의하자~
아니면 i++을 if문 안에도 넣어주는 것도 괜찮다.~.~
연습문제 2
그리고 아래는 어제 제일 고민 많이 했던...
한 줄에 3개씩 출력하는 문제!
package whileLoop;
public class No7 {
// 1부터 30까지의 정수에서 짝수만 한 줄에 3개씩 출력하라
public static void main(String[] args) {
int i = 1;
int j = 0;
while (i <= 30) {
if (i % 2 == 0) {
if (j == 3) {
System.out.println();
j = 0;
}
System.out.printf("%2d\t", i);
j++;
}
i++;
}
}
}
while이 오히려 for보다 직관적인 경우도 있는 것 같다~.~
'부트캠프(END) > Java' 카테고리의 다른 글
문자열 함수, 배열 + SelectionSort (0) | 2022.05.11 |
---|---|
제어문-선택문, 반복문 (0) | 2022.05.09 |
자바 기초(4) : 제어문-조건문 (0) | 2022.05.04 |