Written on
·
194
0
while(j > 0 ) { if( array[j] > value) {
array[j+1] = array[j]; // 왜 if를 쓰면 안되고, while(j>0 && array[j] > value) 로 하면 되는 것인가.
j--;
}
}
이거와 선생님 코드 의 차이가 뭔가요?? 이대로 하면 , 1,2 입력했을때는 잘 되는대, 그 다음부터는 입력만 하고 출력은 안되내요 ㅠㅠ
Answer 1
0
안녕하세요, 허인호님!
질문에 대한 답을 드리자면, while문은 해당 조건이 충족되지 않을 때까지 해당 블록을 계속 반복하여 실행합니다.
질문자님이 개발 환경을 어떻게 설정한지 모르니, 강의 코드로 예를 들겠습니다.
while (j >= 0 && data[j] > tmp)
위의 코드는, j가 양수 또는 0일때 뿐만 아니라 data[j]가 입력받은 정수보다 클 때 실행됩니다.
따라서, 현재 입력된 숫자가 data[j]보다 클 경우에는 실행되지 않습니다.
while(j>=0) {
if (data[j] > tmp) {...}
}
질문자님이 작성해주신 위의 코드는, j가 양수라면 무조건 while문이 실행되는데, 입력받은 정수가 data[j]보다 클 때 while문을 탈출하는 break 문이 없습니다.
따라서, j가 양수이지만 입력받은 정수가 data[j]보다 클 경우에는 무한루프가 되는 것입니다.
if문을 활용하고 싶으시다면, 입력받은 정수가 data[j]보다 클 때의 분기처리를 해주어야합니다.
else문을 작성하여 break(반복문 완전 탈출) 또는 continue(나머지 코드를 스킵하고 처음으로 돌아가서 반복)를 맞게 작성해주시면 정상 작동할 것입니다.
혹시 궁금하신 점이 있다면 댓글 남겨주세요.
도움이 되었으면 좋겠습니다. :)