https://seungmin576.tistory.com/33 여기서 break부터 보면
break문을 사용하지 않으면 결과가 명확하지 않다는 예제를 실행하는데
개인적으로 for문만 너무 써서 while문이 기억이 안나 for문의 내용을
while로 바꿔 써 실행하기로 마음먹고 실행해본다.
1부터 숫자를 1씩 늘려가며 더하다가 합이 100이 넘을때 1부터 몇까지 더했냐는 예제이다.
for문을 사용할때 break문을 사용하지 않아 num 값이 14가 아닌 num 값이 15가 나와 잘못된 값이 나온다는 예제였다.
public class BreakExample {
public static void main(String[] args){
int sum = 0;
int num = 0;
// for(num = 0; sum < 100; num++){
// sum += num;
// }
// System.out.println("num : " + num);
// System.out.println("sum : " + sum);
while(sum < 100){
num++;
sum += num;
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
}
}

그런데 여기서 나는 for문의 내용을 while로 바꾸고 break문을 똑같이 사용안하면 잘못된 값인 num 15가 나올줄 알았으나 무슨일인지 14가 나오는것이다.
for문의 실행순서
//for(초기화식(1.처음에만 실행); 조건식(2); 증감식(4);){
// 수행문(3);
//} 번호가 실행순서임.
int sum = 0;
int num = 0;
for(num = 0; sum < 100; num++){
sum += num;
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
- 처음 for문이 시작할 때 num을 0으로 초기화 한다. (원래는 위에 따로 num 변수의 선언 및 초기화를 해놔서 반복문에서 초기화식은 생략이 가능하다.)
- 조건식(sum < 100)을 검사했을 때 sum은 0이니 참이다.
- 조건식이 참이기 때문에 for문의 수행문(sum += num)을 수행한다.
- 증감식(num++)을 수행하여 num 값이 1이 된다.(여기가 내가 쓴 while문과 결과가 다른 이유)
- 1번을 제외하고 2번부터 반복한다.
https://seungmin576.tistory.com/34 이해 쉽게하려고 for문 진행순서 위 예제를 바탕으로 노가다로 적은거
위 순서를 따르다 보면
num은 14, sum은 91일 경우
1. 초기화식은 처음에만 실행하니 넘긴다.
2. 조건식(sum < 100)을 검사했을 때 sum은 91이니 참이고
3. 조건식이 참이기 때문에 for문의 수행문 (sum += num)을 실행해 sum이 105가 되고
4. 증감식(num++)를 실행해 num이 15가 된다.
그 다음 실행은 조건식에 검사해보니 105 < 100이 되어 조건문을 마치고 빠져나온 뒤
마지막 System.out.println 부분을 출력하는 것인데
여기서 증감식을 실행문이 끝난뒤 실행해 num값이 15가 되어있으니 결과가 14가 아닌 15가 나오는 것이다.
내가 쓴 while문의 실행순서
int sum = 0;
int num = 0;
//실행문에 쓸 변수 초기화!
while(sum < 100){
num++;
sum += num;
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
//while(조건식){
// 조건에 따른 실행문!
//}
//결과값 도출!
- 변수 선언과 초기화가 반복문 밖에 되어있으니 바로 조건식 사용된 변수가 조건에 참인지 거짓인지 대입해본다.
- 참이라면 반복문 안의 내용을 실행한다.
인데 내 내용을 토대로 보면
- sum < 100에 처음에 sum 값이 0이니 바로 반복문을 내용을 실행하는데
- 먼저 num값을 증가 시키고 난뒤 (for문과 동작 순서가 여기서 다름)
- sum += num을 실행한다는 의미이다.
https://seungmin576.tistory.com/34 이해 쉽게하려고 while문 진행순서 위 예제를 바탕으로 노가다로 적은거
위 순서를 따르면
num은 14 sum은 105일 경우
1. sum < 100에 sum 값이 105이니 조건에 따른 실행문이 실행안됨.
2.조건문을 빠져나와 System.out.println 문장을 실행한다.
num 값이 먼저 증가하고 나중에 sum 변수에 증가한 num변수의 값을 더해가며 대입하여 num값이 14일때 조건문이 끝난다.
그러므로 for과 다르게 결과가 나왔던 것이다.
- 여기서 굳이 for문과 같게 결과가 나오게 하려면?
for문과 실행 순서를 똑같이 만들어 주면 된다.
즉 num++; 문장의 실행을 sum += num; 문장보다 더 늦게 하면된다.
- for문과 실행순서를 똑같이 맞췄음에도 불구하고 올바른 값이 나오게 하려면?
이제 break 문으로 조건 설정해주면 끝!
public class BreakExample {
public static void main(String[] args){
int sum = 0;
int num = 0;
// for(num = 0; sum < 100; num++){
// sum += num;
// }
// System.out.println("num : " + num);
// System.out.println("sum : " + sum);
while(sum < 100){
sum += num;
if(sum >= 100)
break;
num++;
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
}
}

'오류, 기능, 문제해결(JAVA)' 카테고리의 다른 글
| static 문제 연습 중에 (0) | 2024.12.16 |
|---|---|
| 한 파일에 클래스가 두 개 존재 할 때 (0) | 2024.12.16 |
| 자바 별찍기 (0) | 2024.12.10 |
| for, while반복문 실행과정(참고용) (0) | 2024.12.10 |
| unreachable statement (1) | 2024.12.10 |