我有一项任务要求我们使用数组而不是列表。我现在有两个问题,一个是每次用户输入时,数组的长度,playerNumber,增加1,所以我需要它无限期,我还需要将数组发送回main方法。下面的代码只能运行一次,当我尝试输入第二个输入时程序崩溃。
int x = 0;
string answer = "yes";
string[] playerNumber = new string[] {};
while (answer == "yes")
{
Console.Write("Enter a number : ");
string y = Console.ReadLine();
playerNumber = new string[] { y };
playerNumber[x-1] = y;
x++;
Console.Write("Enter another number : ");
answer = Console.ReadLine();
Console.WriteLine();
}
答案 0 :(得分:0)
目前尚不清楚你想要做什么。
首先,您的索引超出范围。
你在做:playerNumber[x-1]
,但是x == 0
,所以你得到了一个例外。这是您的代码失败的唯一原因。请注意,将++x;
一行排除也会让您失望,因为在第二个循环中,playerNumber
又是一个大小为1的数组,但x
值现在为2
,你的再次出界。
其次,你在while
循环的内部和内部初始化你的数组。你没有使用外部初始化(也许不需要内部初始化 - 再次,取决于你想要实现的目标)。
第三,您应该向用户提供正确的说明:如果您希望answer
为yes
或no
,请在Console.Write
中指定。
因此,如果我设法猜测您要尝试做什么,这里的代码会有一些更改,包括Array.Resize
的使用(在此上下文中非常低效),并按照你的要求返回数组:
using System;
public class Test
{
public static string[] MyFunc()
{
int x = 1;
string answer = "yes";
string[] playerNumber = new string[x];
while (answer == "yes")
{
Console.Write("Enter a number : ");
string y = Console.ReadLine();
playerNumber[x-1] = y;
x++;
Array.Resize(ref playerNumber, x);
Console.Write("Would you like to enter another number? (yes/no)");
answer = Console.ReadLine();
Console.WriteLine();
}
return playerNumber;
}
public static void Main()
{
Console.WriteLine(MyFunc()[0]); // prints the first string
}
}