VB에서는 배열을 0부터 n까지 쓴다.

dim i(10) as integer
라고 선언하면, i라는 이름을 갖는 정수 배열이 11칸 만들어진다. 인덱스는 0부터 10까지. GetLength메소드를 이용하면 Length를 얻을 수 있다. 이것은 당연히 "11"이다.

이것때문에 정말 헷갈린다. for문 돌릴 때 도대체가 어디까지 돌려야 하는건지 알 수가 없다. 배열의 길이를 알면 되는데 말이지...

by snowall 2009.06.18 21:57
  • 고양이처럼 2009.06.19 10:43 신고 ADDR EDIT/DEL REPLY

    비주얼 스튜디오에서 제공하는 디버거를 사용하도록 유도하는 것 같군.. 역시 뛰어난 상술이야..

  • Lex 2009.06.19 13:32 ADDR EDIT/DEL REPLY

    for문에 GetLength메소드를 쓰면 해결될거 같은데요.^^;

    저의 프로그래밍 입문의 가장 큰 걸림돌은 x = x + y;라는 형식의 구문이었습니다.

    x를 하나의 저장공간이라는 생각을 하지 못했었죠.ㅡㅡ;

    수학적으로는 도저히 이해가 안가는 구문이었기에.....ㅋ

    이거 때문에 입문하는데, 7년이 걸렸다는 설이....ㅋㅋ

    • snowall 2009.06.19 13:38 신고 EDIT/DEL

      getlentgh를 쓰면 배열의 길이가 얻어지죠. 그런데 이 숫자는 실제로 인덱스에 들어갈 수 있는 수보다 1이 큽니다. 배열의 인덱스가 0부터 시작하기 때문이죠. -_-;

    • 고양이처럼 2009.06.19 14:42 신고 EDIT/DEL

      해결이야 여러가지 방법으로 가능하지만 사용자에게 +1을 항상 염두해 두고 코딩하게끔 강요하는게 문제 겠지요..

  • ... 2009.06.19 18:13 ADDR EDIT/DEL REPLY

    이거 자바도 마찬가지 아닌가요?

    예를 들어

    String[] abc = mew String[9];
    해서 String 배열 9개를 만들고

    abc.length도 마찬가지로 9를 return하지만

    배열을 접근할때는 0에서 8까지만 되니까요.

    vb로 for문은 어떻게 구성하는지 잘 모르지만 자바로는

    for (int i = 0; i < abc.length; i++) {

    }

    이렇게 하면 0에서 8까지 호출합니다. 특별히 숫자가 하나 더 큰거는 신경 쓸 필요가 없죠.

    • snowall 2009.06.22 23:15 신고 EDIT/DEL

      VB에서는 다음과 같이 합니다
      for i = 0 to x
      여기서 x에다가 몇개까지 갈지를 쓰는데, 만약 x에 array.GetLength를 쓴다면
      for i = 0 to array.GetLength - 1
      처럼 써야 의도대로 작동합니다.
      여기서 -1을 빼먹으면 에러가 나지요.
      C나 자바에서는 "보다 작다"라든가 "같거나 작다"를 정할 수 있으니까 괜찮지만, VB는 언제나 "거기까지"라고 말해줘야 하니까 -1을 써주는게 의무화 됩니다.

  • Lex 2009.06.19 19:31 ADDR EDIT/DEL REPLY

    강요 아닌 강요이지요. ㅋ^^

    공학자가 만든 언어는 거의 100%(확실하지는 않습니다. ^^;)가 0부터 인덱스를 시작합니다.

    이유는 간단합니다. 메모리의 주소가 0번지부터 시작하기 때문에 공학자 입장에서는 훨씬 이해하기가 쉽거든요.

    하지만, 파스칼(아마도) 같은 수학자가 만든 몇몇 언어는 인덱스가 1부터 시작하는 걸로 알고 있습니다.

    스코프의 차이이지요. 일반적으로 인덱스는 '1부터' 라는 고정관념이 박힌 채 살아오다가, 누군가 인덱스는 '0부터'라고 한다면 많이 당황스럽죠. 저도 그랬습니다. ㅋㅋㅋ 매번 레인지를 계산할 때마다 연습장 꺼내놓고 계산했었더라는 설이...ㅋㅋㅋ

    • snowall 2009.06.22 23:15 신고 EDIT/DEL

      0부터 시작하든 1부터 시작하든 그건 괜찮지만, Length의 값을 그대로 집어넣어도 작동했으면 좋겠어요 -_-

  • 고양이처럼 2009.06.19 20:36 신고 ADDR EDIT/DEL REPLY

    자바랑 C는 0부터 시작하긴 하지만 배열에 개수가 배열 선언의 argument와 일치한다는 점이 VB하고는 차이겠지요 ^^
    아 그리고 Fortran은 1부터 시작합니다 :D

  • ... 2009.06.20 01:27 ADDR EDIT/DEL REPLY

    아... dim i(10) as integer 이 부분을 제대로 안보고 지나쳤네요.