인프런 커뮤니티 질문&답변

Ant님의 프로필 이미지
Ant

작성한 질문수

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

문제와 풀이1

while문 문제와 풀이 질문입니다(짝수 출력)

작성

·

392

·

수정됨

0

 IMG_0192.jpeg안녕하세요~

이렇게 코드를 짜면 값이 안나오는데 왜일까요?

num을 1로 했더니 결과가 안나와서 찾아보니

int가 정수 라서 실행이 안된다길래

int를 2로 잡고 돌렸는데도 값이 2만 나옵니다.

뭐가 문제인가요?

 

그리고 코드를 이렇게 짰는데

값은 강의 내용과 동일하게 나옵니다.

강의에서는 num과 count 두 변수를 이용하던데

이유가 있나요?

IMG_0193.jpeg

코딩 강의 처음 들어보는 초보자라

왕초보 기준으로 설명해주실 수 있을까요😔

답변 2

1

안녕하세요. knjou92님, 공식 서포터즈 OMG입니다.

 

while문은 while() 괄호 사이의 조건을 만족했을 때만 { } 안의 구문이 실행됩니다.

num을 1로 했을 때 결과가 나오지 않았다면 while()괄호 사이의 조건을 만족하지 못하여 실행되지 않았다는 사고로 문제를 접근해야합니다.

 

while문의 () 조건을 살펴보면 다음과 같은 두개의 조건이 만족했을 때만 실행되는 조건임을 확인할 수 있습니다.

 

(조건 1)

num은 20과 같거나 작으면서 (num <= 20)

 

(조건 2)

num을 2로 나눴을 때 나머지가 0인 경우 (= 2, 4, 6, 8 ....) => 짝수죠? (num % 2 == 0)

즉, while문의 조건을 만족하는 숫자를 나열하면 (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) 입니다.

(0 과 0보다 작은 정수는 일단 제외하고 생각하세요)

 

(결론)

num이 1 인경우 조건1 을 만족하지만, 조건2를 만족하지 못하여 while()문 안의 구문이 실행되지 않아 값이 출력되지 않았습니다.

 


 

강의에서는 num과 count 두 변수를 이용하던데

이유가 있나요?

image

문제를 보시면 갯수 제한을 10개로 두어 출력하는 프로그램을 작성하라고 되어 있습니다.

문제가 단순하고 숫자가 큰 범위의 숫자가 아니기에 강의에서와 같이 암산으로도 충분히 count변수를 사용하지 않더라도 짝수 10개를 출력하려는 범위의 숫자 조건을 20으로 계산할 수 있습니다.

knjou92님이 작성한 코드가 틀린 코드는 아니지만, 문제의 숫자가 암산의 범위를 넘어서는 숫자거나 계산식이 단순하지 않다면 우리는 문제를 해결하기 위한 데이터를 '변수'를 사용하여 정의하고 정의한 '변수'를 활용하여 문제를 해결합니다.

강의에서는 출력하려는 짝수의 갯수를 count변수로 정의하여 풀이한 것이고, knjou92님은 출력하려는 갯수를 정의한 count변수를 사용하지 않고 문제를 풀이한 것이니 풀이법의 차이가 있을 뿐 결과는 같게 나온 것입니다.

 

감사합니다.

num = 2 일 때 2만 출력된 이유

num이 2일 때는 조건1 조건2 를 모두 만족하여 { } 구문의 System.out.println(num++);이 실행되어 2를 출력하였습니다.

 

2가 출력되고 나서 num++ 로 인해 2는 값이 1 증가하여 3이되었습니다.

num이 3이 된 순간 while문의 ()의 조건2 (num % 2 == 0)을 만족하지 않아 실행되지 않은 것입니다.

 

 

1

 

//num = 1 일 때,
int num = 1;
// 1%2 == 0 조건에 부합되지 않아 false
while (1 <= 20; && 1 % 2 == 0) {
System.out.Println(num++); // 당연히 실행 X
}
//num = 2 일 때,
int num = 2;
// 둘 다 조건에 부합되어 true 로 코드블록 실행
while (2 <= 20; && 2 % 2 == 0){
System.out.Println(num++); // 단 한번만 실행 why? num++ 하면 num=3 되어 조건식 false를 반환하므로 실행 x
} 

num = 1 일 때, while 조건식 (1 % 2 == 0) 이 fasle가 되어 && 비교연산자로 성립되지 않아 출력문이 실행되지 않습니다.

num =2 일 때, while 조건식은 둘 다 true 조건식이 일치해 실행되지만 num++ 하면 num=3 되어 조건식 false를 반환하므로 단 한번만 실행됩니다!

Ant님의 프로필 이미지
Ant

작성한 질문수

질문하기