你可以帮助我并纠正我的代码
static void SolveAndDraw(int number)
{
// Create Dynamic List of list to
List<List<int>> matrix = new List<List<int>>();
// Intialize the inner lists
for (int j = 0; j < number; j++)
{
matrix.Add(new List<int>());
}
char direction = 'r';
int xPos = 0, yPos = 0;
int rightLimit = number - 1;
int leftLimit = 0;
int upLimit = 0;
int bottomLimit = number - 1;
for (int i = 1; i <= number * number; ++i)
{
// matrix[yPos][xPos] = i;
matrix[xPos].Insert(yPos, i);
switch (direction)
{
case 'r':
if (xPos < rightLimit)
{
++xPos;
}
else
{
direction = 'd';
++upLimit;
++yPos;
}
break;
case 'l':
if (xPos > leftLimit)
{
--xPos;
}
else
{
direction = 'u';
--bottomLimit;
--yPos;
}
break;
case 'u':
if (yPos > upLimit)
{
--yPos;
}
else
{
direction = 'r';
++leftLimit;
++xPos;
}
break;
case 'd':
if (yPos < bottomLimit)
{
++yPos;
}
else
{
direction = 'l';
--rightLimit;
--xPos;
}
break;
}
}
// Now, just dump the matrix contents to stdout
for (int i = 0; i < number; ++i)
{
for (int j = 0; j < number; ++j)
{
Console.Write("{0}\t", matrix[i][j]);
}
Console.Write("\n");
}
Console.ReadLine();
}
崩溃并发出错误:
索引必须在List的范围内。
参数名称:index
答案 0 :(得分:2)
是否需要列表列表,或者您可以使用具有2个维度的数组(您将维度传递给数字,为什么需要列表?)
static void SolveAndDraw(int number)
{
// Create array with two dimensions of size number
int[,] matrix = new int[number,number];
char direction = 'r';
int xPos = 0, yPos = 0;
int rightLimit = number - 1;
int leftLimit = 0;
int upLimit = 0;
int bottomLimit = number - 1;
for (int i = 1; i <= number * number; ++i)
{
matrix[xPos,yPos] = i;
switch (direction)
{
case 'r':
if (xPos < rightLimit)
{
++xPos;
}
else
{
direction = 'd';
++upLimit;
++yPos;
}
break;
case 'l':
if (xPos > leftLimit)
{
--xPos;
}
else
{
direction = 'u';
--bottomLimit;
--yPos;
}
break;
case 'u':
if (yPos > upLimit)
{
--yPos;
}
else
{
direction = 'r';
++leftLimit;
++xPos;
}
break;
case 'd':
if (yPos < bottomLimit)
{
++yPos;
}
else
{
direction = 'l';
--rightLimit;
--xPos;
}
break;
}
}
// Now, just dump the matrix contents to stdout
for (int i = 0; i < number; ++i)
{
for (int j = 0; j < number; ++j)
{
Console.Write("{0}\t", matrix[i,j]);
}
Console.Write("\n");
}
Console.ReadLine();
}
}
答案 1 :(得分:1)
如果您尝试在大于当前列表计数的索引处插入(),则抛出该异常。很可能你正在遍历&#34;矩阵&#34;以这种方式声明
matrix[xPos].Insert(yPos, i);
正在插入尚未包含yPos大小的列表。避免这种情况的最简单方法是最初为每个内部列表添加足够的元素:
// Intialize the inner lists
for (int j = 0; j < number; j++)
{
matrix.Add(new List<int>());
// New code here:
for (int k = 0; k < number; k++)
matrix[j].Add(0);
}
答案 2 :(得分:0)
没有在我脑海中运行代码,这一行
for (int i = 1; i <= number * number; ++i)
看起来很可疑,可能你应该从0开始,但话说再说一次,我可能完全不在了。