2016-10-21 5 views
0

저는이 루프를 잠시 동안 고치려고 노력해 왔습니다. 나는 몇 세대를 거쳤습니다.이 컬렉션을 반복하면 항상 마지막 요소가 누락됩니다.

이 코드는 몇 가지 기준에 따라 플랜트 개체 모음을 반복 한 다음 원하는 플랜트 개체를 만듭니다.

목록에있는 각 개체를 사용해야합니다.

목록의 마지막 개체까지 작동합니다. 웬일인지, 그것은 단지 콜렉션의 마지막 구성원을 치지 않으며, 전에는 실행을 항상 중단합니다. 그래서 나는 마지막으로 제외한 모든 새로운 식물 형 개체를 필요로합니다.

이 목록은이 같은 IList의 사용 : 여기

IList<PlantType> plants; 

루프입니다 :

(nextPosition != stopPosition) 

에 :

var currentPosition = 0; 
var nextPosition = (currentPosition + 1) % plants.Count; 
var stopPosition = plants.Count - 1; 
var HalfLife = 90; 

while ((nextPosition != stopPosition) && plants[currentPosition].cell_A + HalfLife >= plants[nextPosition].Cell_Z) 
{ 
    plantName = plantName + ";" + plants[currentPosition].Name; 
    currentPosition = nextPosition; 
    nextPosition = (currentPosition + 1) % plants.Count; 
} 

yield return 
      CreateNewPlantType(plantName); 

내가 시도 while 문이 부분을 변경

(nextPosition < stopPosition) 

하지만 여전히 목록의 마지막 요소가 누락됩니다.

(nextPosition <= stopPosition) 

을하지만 무한 루프를 만듭니다

나는 또한이 시도!

그래서이 문제를 해결하는 방법을 모르겠습니다.

아이디어가 있으십니까?

감사합니다.

+1

'stopPosition = plants.Count'을 사용해보십시오. _next_ 위치가 범위를 벗어 났을 때 멈추고 있는데, 이것은 배열의 마지막 위치에 해당합니다. –

+1

실제로는 '% plants.Count' 위치를 취한 이후로 무한 할 것입니다. 모듈의 목적은 무엇입니까? –

답변

2

모든 nextPosition 정의에서 % plants.Count을 제거하십시오. 그것들은 마지막 요소를 만들도록합니다. nextPosition

그 후 (nextPosition <= stopPosition)이 작동해야합니다.

귀하의 상태를 while ((currentPosition < stopPosition) ...으로 변경할 수도 있습니다. 내 의견으로는이 코드를 좀 더 읽기 쉽게 만들어줍니다.

관련 문제