2016-02-02 23 views
0

我有两个列表(相同长度),大约存储了10个整数。 我通过一个for循环运行它们来检查它们是否与if语句同时出现。我知道这个列表包含1个值,该值对于if-陈述有效。 的确,我的第一个Debug显示了正确的值(对应于列表中值的位置,即8)。声明了数组大小,但仍然出现错误:索引超出范围

我的第二个调试显示了这个地方的相应值,即71. 但是,当我尝试将列表的值(它是71)赋予数组DefMarkerX[count]的第一个点时,出现以下错误。

IndexOutOfRangeException : Array index is out of range.

我真的不知道问题是什么,因为我已经在早期阶段声明了数组的大小。

我的代码是:

public static int Markers = 1; 
public static int[] DefMarkerX = new int[Markers]; 
public static int[] DefMarkerY = new int[Markers]; 

// .................................................... 

int count = 0; 
for (int i = 0; i < MarkerPosX.Count; i++) 
{ 
    if (MarkerPosX[i] > 10 && MarkerPosX[i] < 246 && MarkerPosY[i] > 10 && MarkerPosY[i] < 246) 
    { 
     Debug.Log("i: " + i) 
     Debug.Log("markerposx: " + MarkerPosX[i]); 
     DefMarkerX[count] = MarkerPosX[i]; 

显示最后一行是从哪里获得我的错误。 在此先感谢您的帮助!

+2

您正在将数组的大小设置为1,这意味着如果i> 0它将超出范围。 P.S.,不要忘记阵列是基于0的,所以阵列中的第一项将位于位置0. – Spluf

+1

后整个代码 –

+0

'count'仍然为0,所以它不会抛出任何异常。请发布完整的代码。 –

回答

1

不知道你的意思做,但如果你不知道的DefMarkerX大小事先,你可以使用一个List<int>

public static List<int> DefMarkerX = new List<int>; 

for (int i = 0; i < MarkerPosX.Count; i++) 
{ 
    if (MarkerPosX[i] > 10 && MarkerPosX[i] < 246 && MarkerPosY[i] > 10 && MarkerPosY[i] < 246) 
    { 
     DefMarkerX.Add(MarkerPosX[i]); 
    } 
} 

如果你想保留的MarkerPosX索引可以使用List<KeyValuePair<int, int>>

public static List<KeyValuePair<int, int>> DefMarkerX = new List<KeyValuePair<int, int>>; 

for (int i = 0; i < MarkerPosX.Count; i++) 
{ 
    if (MarkerPosX[i] > 10 && MarkerPosX[i] < 246 && MarkerPosY[i] > 10 && MarkerPosY[i] < 246) 
    { 
     DefMarkerX.Add(new KeyValuePair(i, MarkerPosX[i])); 
    } 
} 
+0

感谢您的回复。我已经将数组更改为List,现在它工作正常。我认为一个数组也是足够的,因为我知道数组的大小(这与标记相等)。 – MW1

+0

如果它有用,请考虑接受它。 –

相关问题