2017-12-14 4 views
-5

다음 코드가 있습니다. 나는 정수의 listA를 가지고 있으며 listA로부터 정수를 역순으로 취하는 다른 listB를 만들었다. 그러나 컴파일 한 후 "ArgumentOutOfRangeException"을 얻습니다. 내 색인 생성이 정상적으로 보였다고 생각하는 이유를 이해하지 못합니다.int 목록 반전

 List<int> listNum = new List<int> { 1, 2, 3, 4 }; 
     listNum.Add(7); 

     List<int> reverseList = new List<int>(); 

     int k = 0; 
     int ListLength = listNum.Count-1; 

     for (int i = ListLength; i >= 0; i--) 
     { 
      reverseList[k] = listNum[i]; 
      k++; 
     } 
+4

'reverseList'가 제로 항목이 있습니다. 제로. 없음. * reverseList에 대한 * 인덱스가 범위를 벗어났습니다. –

+4

묻기 전에 여기에서 디버깅 할 여지가 충분합니다. 예를 들어'returnList.Count'와'listNum.Count'뿐만 아니라'k'와'i'도 기록하는 for 문에 print 문을 넣으면 100 % 문제를 스스로 발견 할 수 있어야합니다. –

+0

'listNum.Reverse()'를 사용할 수 있습니다. 'reverseList = listNum.ToList()'리스트를 복사하고 역순으로하면 : reverseList.Reverse()' –

답변

3

직접적인 방법 Enumerable.Reverse, 당신은 당신의 코드에 대한

listNum .Reverse() 

다음과 같이 할 수있다 다만 내용은이

for (int i = ListLength -1; i >= 0; i--) 
    reverseList.Add(listNum[i]); 

좋아한다 그것은 List는 배열이 아니다이다

+1

Pranay가 마지막으로 한 말의 의미는'List'와'array'는 다른 것들입니다. 목록에는 처음에는 요소가 없습니다. 고정 된 크기의 배열과 달리 위치 3에는 myList [3]로 액세스 할 수있는 것이 없습니다. 배열이'int [] [myArray = new int [5]'로 선언 되었다면 myArray [3]가 될 것입니다. 'List myList = new List (5)'라고 말하면, 5 개의 항목 (성장할 수있는)에 대한 초기 용량을 가진 목록을 만들 뿐이지 만 5 개의 항목은 없다. 그것에는 0 개의 항목이 있습니다. 'Add() '를 다섯 번 호출하면 5 개의 항목이 생기고, myList [3]를 수행하면 충돌이 일어나지 않습니다. –

+1

@CaiusJard - gr8 op가 C#의 책을 읽을 필요가 있고 목록과 배열을 읽어야한다고 생각합니다. 섹션 ... :) –

+0

거기에 허용 된 답변에 마이너스 -1을하는 특별한 경우가 있습니다 ... –

1

reverseList에는 0 개의 요소가 있기 때문입니다. 루프 reverseList[k].Add(listNum[i]);

또는 간단한 사용 LINQ에 대한 당신이 아래에 할 수있는이 문제를 해결하려면

reverseList = listNum.Reverse();