while 문을 사용하여서 누적 합계가 100을 넘지 않는 가장 큰 수를 찾아 보도록 하자.
먼저 이 예제의 핵심은 while 문의 조건식을 어떻게 짜는가에 있어.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package example; /* 1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰 수가 되는 지를 알아내는 예제*/ public class FlowEx26 { public static void main(String[] args) { int sum = 0; int i = 1; while(sum <= 100){ sum += i; System.out.println(i +" => "+ sum); i++; } } } | cs |
위 코드는 내가 처음에 짰던 코드야. 별 생각 없이 sum 에 i를 누적시키고, sum을 출력하고, i를 증가시키면 될것이라고 생각했지. 조건식은 누적합계가 100 이하라면 반복, 100을 넘어서면 스톱. 그 결과는 어땠을까?
내 생각과는 달리 i = 14, sum = 105가 찍혔어. 다시 곰곰히 생각해보니, i 가 13일때 sum에 누적이 되고(91), 콘솔에 그 것들을 출력을 하고, i를 증가시켜 (i++, i = 14) 이 상태에서 sum 이 100보다 작은지 조건식을 판별하는데, sum은 91 이기 때문에 true 가 반환되더라고. 그래서 누적이 한번 더 되는 것이었지.
이 문제를 해결하기 위해서는 조건식에 sum이 누적된 결과가 반영되어야 한다는 것이었어. 그래서 i를 sum에 누적하는 코드를 조건식 안에 집어 넣어봤어.
1 2 3 4 5 6 | int sum = 0; int i = 0; while((sum += i) <= 100){ System.out.println(i +" => "+ sum); i++; } | cs |
짠! 13에 91! 정상적으로 잘 나왔...??? 자세히 보니 제일 위에 쓸데 없는 값이 하나 붙어 있네?
가장 처음 반복할때 0 값이 들어갔기 때문이야. 이 문제를 해결하기 위해서 i를 sum에 더하기 전에 먼저 증감 시켜줄 필요가 있었어.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package example; /* 1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰 수가 되는 지를 알아내는 예제*/ public class FlowEx26 { public static void main(String[] args) { /*int sum = 0; int i = 1; while(sum <= 100){ sum += i; System.out.println(i +" => "+ sum); i++; }*/ /*int sum = 0; int i = 0; while((sum += i) <= 100){ System.out.println(i +" => "+ sum); i++; }*/ int sum1 = 0; int i1 = 0; while((sum1 += ++i1) <= 100){ System.out.println(i1 +" => "+ sum1); } int sum2 = 0; int i2 = 1; while((sum2 += i2) <= 100){ System.out.println(i2 +" => "+ sum2); i2++; } } } | cs |
둘 중 어떤 방법이어도 좋아. 전치수식을 사용해서 값을 누적 시키든지, 초기화 시키는 값을 바꾸어 주든지 그 결과는...
하핫! 이제 정상적으로 작동 되는군!
자잘한 버그를 잡는다고 몇번 수정을 했는데, 사실 우리가 처음에 구하고자 했던, 누적합계가 100을 넘지 않는 가장 큰 수는 13 !! 이라고 결론을 내며 이만 포스트를 종료하겠어. 바이바이~
'Java > Java 공부' 카테고리의 다른 글
왜 제네릭(Generic)을 사용해야 하는가? (0) | 2017.04.18 |
---|---|
Java 입력받은 숫자의 합을 구하는 예제 ( while, flag ) (0) | 2016.09.01 |
Java 숫자를 입력하고 각 자리의 합을 구해보자 (0) | 2016.09.01 |
DB에서 파일 가져오기 (1) | 2016.07.25 |
DB에 파일 집어넣기 (0) | 2016.07.25 |