我一直在努力解决这个问题几个小时了,我终于得到了这个方法几乎可以工作,除了它总是超过数组长度的1个条目。我该如何解决这个问题?
public static string FillContestArray(string[,] talentCodes)
{
int x = 0;
int y = 0;
for (x = 0; x < talentCodes.Length; x++)
{
for (y = 0; y < talentCodes.Length; y++)
{
Console.WriteLine("Enter contestant's name: ", x + 1);
talentCodes[x,y] = Console.ReadLine();
Console.WriteLine("Enter contestant's talent: ", y + 1);
talentCodes[x,y] = Console.ReadLine();
}
}
return talentCodes[x, y];
}
编辑:人们要求提供更多细节。以下是其余代码。我想要做的是将数组参赛者传递给这个方法FillContestArray以填充数组,然后继续从那里开始。如果相关,则用户决定数组的大小。很抱歉缺乏细节或适当的术语,我很新。谢谢!
int userInput = 0;
int thisYear, lastYear;
Console.Write("Please enter the number of contestants entered in last year's competition: ");
lastYear = EnterContestants(userInput);
Console.Write("Please enter the number of contestants entered in this year's competition: ");
thisYear = EnterContestants(userInput);
ContestMessage(thisYear, thisYear);
string[,] contestants = new string[thisYear,thisYear];
FillContestArray(contestants);
Console.ReadKey();
}
public static int EnterContestants(int entries)
{
int numbOC;
string numbString;
numbString = Console.ReadLine();
numbOC = Convert.ToInt32(numbString);
return numbOC;
}
答案 0 :(得分:2)
您应该使用二维数组长度 - 请参阅此问题以获取示例:How do you get the width and height of a multi-dimensional array?
答案 1 :(得分:2)
当你的for循环结束时,x和y的最后一个值是talentCode.Length()
。当for循环终止时,x和y等于talentCode.Length()-1
。这是数组后面的1个元素,因为它从0到return talentCode[x,y]
计数。如果你现在return talentCode;
,你已经在数组之后使用了索引。
顺便说一下,你似乎真的想要
return talentCode[x,y];
将返回数组,而不是
return talentCode[x-1,y-1];
与相比,无效(尝试返回长度+ 1,长度+ 1条目)
{{1}}
实际上将返回二维数组的最后一个元素(参见上面的解释)
答案 2 :(得分:1)
从更新的代码中猜测一下你想要实现的目标......
使用string[,] contestants = new string[thisYear,thisYear];
创建参赛者数组时,会创建一个thisYear
平方元素数组。
例如,如果在今年的比赛中有5位参赛者,contestants
将包含25个元素
contestants[0,0]
contestants[0,1]
contestants[0,2]
contestants[0,3]
contestants[0,4]
contestants[1,0]
contestants[1,1]
...
contestants[4,4]
如果我猜测,我会想象你实际想要的是制作一个每个参赛者有两个元素的数组,一个用于他们的名字,另一个用于他们的才能,例如:
contestants[0,0] = "Alice"
contestants[0,1] = "Dancing"
contestants[1,0] = "Bob"
contestants[1,1] = "Juggling"
contestants[2,0] = "Carol"
contestants[2,1] = "Hacking"
contestants[3,0] = "Dan"
contestants[3,1] = "Singing"
...
这可以通过number of contestants
创建2
的二维数组来实现,例如:
string[,] contestants = new string[thisYear, 2];
然后将此数组传递到修改后的FillContestArray()
函数,以提示输入每个参赛者的名称和才能,如下所示:
public static void FillContestArray(string[,] talentCodes)
{
int x = 0;
for (x = 0; x < talentCodes.GetLength(0); x++)
{
Console.WriteLine("Enter contestant's name: ", x + 1);
talentCodes[x,0] = Console.ReadLine();
Console.WriteLine("Enter contestant's talent: ", x + 1);
talentCodes[x,1] = Console.ReadLine();
}
}
请注意,函数的返回类型现在为void
,这意味着函数不需要返回值,它只填充给定的数组。
希望这有帮助