• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

안녕하세요. for 반복문의 조건을 잘못 쓴 것인지 여쭤보고 싶습니다..!

21.04.05 18:27 작성 조회수 518

2

<script>
var idList = Array(10);
for (var num = 1; num <= idList.length; num++){
    idList[num] = '<li id="id' + num + '">id' + num + '</li>';
};

document.body.innerHTML= '<ul>' + idList.join("") + '</ul>';
</script>

안녕하세요! 문제 내주신 코딩시간을 보고

li가 10개이니까 배열 엘리먼트의 갯수를 10개로 정해서 다음과 같은 코드를 써보았는데요

num의 범위가 <일 땐 오류가 나지 않는데 <=라고 작성하니까

코드가 제대로 작동하지 않는데 왜 그런 것일까요?

오류를 다른 방식으로 대체하고자 idList.length + 1이라고도 적어보았는데 마찬가지였습니다..!

변수에 대한 범위를 명확히 숫자로 쓰지 않고 다른 변수로 범위를 지정하면 이렇게 작성하면 안되는 걸까요..?

답변 2

·

답변을 작성해보세요.

2

김연지님, 김경민님 모두 멋있어요. 박수를 보냅니다^^

김연지님의 프로필

김연지

질문자

2021.04.06

격려해주셔서 감사합니다 선생님 ㅠㅂㅠ!!! ㅎㅎㅎ

김경민님의 프로필

김경민

2021.04.06

감사합니다!

2

김경민님의 프로필

김경민

2021.04.05

안녕하세요!

거의 대부분의 언어에서 배열의 인덱스는 0으로 시작합니다.

따라서 길이가 n인 배열의 마지막 인덱스는 n-1이 됩니다.

(예) 길이가 3 : arr[0], arr[1], arr[2]

때문에 반복문을 통해 배열의 처음부터 끝까지 접근할 때

var i = 0 ; i < length ; i++ 

와 같이 인덱스를 0으로 초기화하고, 

<=가 아닌 < 를 통해 length보다 1이 작은 수 까지만 대입하면서

순회합니다.

"변수에 대한 범위를 명확히 숫자로 쓰지 않고 다른 변수로 범위를 지정하면 이렇게 작성하면 안되는 걸까요..?"

범위를 명확한 숫자로 쓰면 함수의 유연함이 떨어진다고 생각합니다.

일반적으로는 반복문의 대상이 될 배열의 크기를 모르는 경우가 많으므로

숫자보다 변수로 사용하시는게 좋습니다.

김연지님의 프로필

김연지

질문자

2021.04.05

답변 감사합니다!! ㅎㅎ 질문 조금만 더 해도 될까요?

이번에 내주신 문제가 <id="id1"> 이렇게 1부터 시작해서 

<id ="id10">이렇게 10까지 나열해야 하는 것이라

이럴 땐 인덱스 0을 아무런 수정 없이 바로 활용하기가 어려운데

제가 쓴 for문을 어떤식으로 고쳐보는 것이 좋을까요?

김경민님의 프로필

김경민

2021.04.05

for문 안에서 인덱스 i는 0부터 9까지입니다.

id값에는 1부터 10까지가 필요한것같습니다.

0~9를  1~10으로 사용하려면 어떻게 하면 될까요? :)

김연지님의 프로필

김연지

질문자

2021.04.06

큽 ㅠㅠ 저는 Array()의 엘리먼트 갯수를

var idList = Array(10); 

이렇게 작성해서 10개로 처음에 지정했으니

인덱스를 1부터 시작하게 해서 10이하로 지정하면 된다고 생각했거든요..

그런데 부호를 <=이렇게 쓰니까 제대로 동작하지 않는 현상이 벌어지더라구요..!

분명 미만을 나타내는 <를 쓸 때는 잘 동작하던 코드였는데 (비록 9까지밖에 안나오긴 했지만)

제가 어디서 잘못쓴건지 알고 싶어서 질문드렸었습니다..ㅠㅠ !! 

다른 곳에서도 이하를 나타낼 때는 저렇게 쓰던데 제가 어디를 틀린건지를 잘 모르겠어서요..!

흠 혹시 제가 쓴 코드의 오류를 잡아주실 수 있으신가요

김경민님의 프로필

김경민

2021.04.06

먼저 코드의 오류는 "배열의 크기를 벗어난 원소에 접근"하기 때문에 발생합니다!

(구글검색 키워드: Index Out Of Bound Error)

Array(10) => 크기 10인 배열 => 인덱스는 0부터 시작 => idList[0], ..., idList[9]

for문에서 i의 조건이 10 이하(10포함)이기 때문에

존재하지 않는 idList[10] (=11번째 원소)에 접근하면서 오류가 발생합니다.

코딩시간 문제 해결을 위해서는

0부터 시작하는 인덱스를, for문 내부에서 1부터 시작하는 값으로 사용?표현?하기

위한 고민을 해보시면 될것같습니다 : )

반복문 사용이 낯설으셔서 한번에 안떠오르는게 자연스럽습니다.

잠깐만 고민해보시고 댓글주세요!!

김연지님의 프로필

김연지

질문자

2021.04.09

감사합니다. 덕분에 정해둔 배열의 갯수보다 초과된 범위의 인덱스 값을 불러오려고 하면 오류가 생긴다는 것을 알게됐습니다 ㅎㅎ 

인덱스 1번으로 뛰어넘어서 값을 결정하니까 인덱스 0번 자리 값은 undefined가 되는 찝찝함도 생기구요.

그래서 인덱스 값을 0번부터 불러오되 for의 중괄호 표현식에서 변수에 각각 1을 더해줘서 원하는 결과를 구했습니다.

도움주셔서 감사해요 !!!! 좋은 주말 보내세요!