이 문제는 1부터 하나씩 증가하는 수이기 때문에 1 + 2 + 3을 더해야 한다.
우선 while
문을 사용하지 않고 단순하게 풀어보자.
package loop;
public class While2_1 {
public static void main(String[] args) {
int sum = 0;
sum = sum + 1; // sum(0) + 1 -> sum(1)
System.out.println("i = " + 1 + " sum = " + sum);
sum = sum + 2; // sum(1) + 2 -> sum(3)
System.out.println("i = " + 2 + " sum = " + sum);
sum = sum + 3; // sum(3) + 3 -> sum(6)
System.out.println("i = " + 3 + " sum = " + sum);
}
}
이 코드의 정답은 맞다. 하지만 개선할 점이 많이 있는데, 무엇보다 변경에 유연하지 않다.
다음과 같이 요구사항이 변경되었다.
문제 : 10부터 하나씩 증가하는수를 3번 더해라 (10 ~ 12 더하기)
이렇게 되면 10 + 11 + 12
를 계산해야 한다. 문제는 코드를 너무 많이 변경해야 한다는 점이다.
변수를 사용해서 더 변경하기 쉬운 코드로 만들어보자. 변경되는 부분을 변수 i
로 바꾸어보자.
package loop;
public class While2_2 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
sum = sum + i; // sum(0) + i(1) -> sum(1)
System.out.println("i = " + i + " sum = " + sum);
i++; // i = 2
sum = sum + i; // sum(1) + i(2) -> sum(3)
System.out.println("i = " + i + " sum = " + sum);
i++; // i = 3
sum = sum + i; // sum(3) + i(3) -> sum(6)
System.out.println("i = " + i + " sum = " + sum);
}
}
변수 i
를 사용한 덕분에 i
의 값만 변경하면 나머지 코드를 전혀 변경하지 않아도 된다.
i=10
으로 변경하면 다른 코드의 변경 없이 앞서 이야기한 10 + 11 + 12
의 문제도 바로 풀 수 있다.
좋은 코드인지 아닌지는 변경 사항이 발생했을 때 알 수 있다. 변경 사항이 발생했을 때 변경해야 하는 부분이 적을수록 좋은 코드이다.
예)
i=1
, endNum=3
이라고 하면 1 ~ 3까지 총 3번 더해야한다.i=1
, endNum=10
이라고 하면 1 ~ 10까지 총 10번 더해야한다.i=10
, endNum=12
라고 하면 10 ~ 12까지 총 3번 더해야한다.먼저 i=1
, endNum=3
이라고 생각하고 문제를 풀어보자
package loop;
public class While2_3 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
int endNum = 3;
sum = sum + i;
System.out.println("i = " + i + " sum = " + sum);
i++;
sum = sum + i;
System.out.println("i = " + i + " sum = " + sum);
i++;
sum = sum + i;
System.out.println("i = " + i + " sum = " + sum);
i++;
}
}
i=1
, endNum=3
이므로 다음 코드를 총 3번 반복해야 한다.
sum = sum + i;
System.out.println("i = " + i + " sum = " + sum);
i++;
그런데 i=1
, endNum=10
과 같이 변경하면 이 코드를 총 10번 반복해야 한다. 따라서 같은 코드를 더 많이 추가해야 한다.
이 문제를 제대로 풀기 위해서는 코드가 실행되는 횟수를 유연하게 변경할 수 있어야 한다. 한마디로 같은 코드를 반복 실행할 수 있어야 한다.
while
문을 사용하면 원하는 횟수 만큼 같은 코드를 반복 실행할 수 있다.
package loop;
public class While2_3 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
int endNum = 3;
while (i <= endNum) {
sum = sum + i;
System.out.println("i = " + i + " sum = " + sum);
i++;
}
}
}
i
가 endNum
이 될 때 까지 반복해서 코드를 실행하면 된다.
i=1
, endNum=3
이라면 3번 반복하면 된다. i = 1 → 2 → 3
i=3
, endNum=4
라면 2번 반복하면 된다. i = 3 → 4
while
문에서 i <= endNum
조건을 통해 i
가 endNum
이 될 때 까지 코드 블럭을 실행한다.i
가 endNum
보다 크면 while
문을 종료한다.
왼쪽은 while
의 조건식을 체크하는 단계이고, 오른쪽은 조건식을 통과하고 나서 while
문의 코드 블럭을 실행하는 부분이다.
i=1, sum=1
을 출력한다.i=2, sum=3
을 출력한다.i=3, sum=6
을 출력한다.while
문을 종료한다.sum(0), i(1), endNum(3)
// 루프 1
while (i(1) <= endNum(3)) -> true
sum(0) + i(1) -> sum(1)
i(1)++ -> i(2)
// 루프 2
while (i(2) <= endNum(3)) -> true
sum(1) + i(2) -> sum(3)
i(2)++ -> i(3)
// 루프 3
while (i(3) <= endNum(3)) -> true
sum(3) + i(3) -> sum(6)
i(3)++ -> i(4)
// 루프 4
while (i(4) <= endNum(3)) -> false