返回数组问题的 C# 方法
本文关键字:方法 问题 数组 返回 | 更新日期: 2023-09-27 18:29:43
class Program
{
public static void Main()
{
double[,, ] stats = new double[3, 2, 10];
string[] players = new string[3];
int x, y, z;
players[0] = "Tom Brady";
players[1] = "Drew Brees";
players[2] = "Peyton Manning";
for (x = 0; x < 3; ++x)
{
Console.WriteLine("Enter stats for {0}", players[x]);
for (y = 0; y < 2; ++y)
{
Console.WriteLine("Game {0}", y + 1);
stats[x, y, z] = ***inputstats(stats[x, y, z])***;
}
}
}
public static double[] inputstats(double[] methodstats)
{
methodstats = new double[10];
Console.WriteLine("Enter pass attempts: ");
methodstats[0] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter completions: ");
methodstats[1] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter completion percentage: ");
methodstats[2] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter total yards: ");
methodstats[3] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter touchdowns: ");
methodstats[4] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter interceptions: ");
methodstats[5] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter rushing yards: ");
methodstats[6] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter rushing touchdowns: ");
methodstats[7] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter fumbles: ");
methodstats[8] = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter QB rating: ");
methodstats[9] = Convert.ToDouble(Console.ReadLine());
return methodstats;
}
}
这是我到目前为止的代码。请记住,我是非常初学者。我正在尝试创建一个控制台,该控制台将在 3 个游戏中为 2 个不同的玩家请求用户输入。一旦我获得了用户输入的所有数据,我将继续添加提示用户显示游戏 1 统计线、游戏 2 统计线或两个游戏的平均值的功能。现在我只停留在获取输入上。我收到一个错误,其中我的行中有粗体和斜体,表明最佳重载方法匹配有一些无效的参数。我在这里搞砸了什么?我很确定它在 z 中,但我不太确定如何将其输入数组的第三维以获取 10 个统计数据。哈尔普!
该行有 2 个不匹配:
stats[x, y, z] = inputstats(stats[x, y, z]);
double[] inputstats(double[] methodstats)
{
}
表达式 stats[x, y, z]
是一个double
,而不是一个数组。因此,当您修复参数错误时,您将获得一个用于分配返回值的错误。
此行将编译:
stats[x, y, z] = Math.Sin(stats[x, y, z]);
因为该函数声明为 double Sin(double a)
输入法收集双精度数组,这在当前数组形式中是不可能的。您必须使用交错数组(数组数组的数组:
double[][][] stats = ...
// extra code to create the arrays
inputstats(stats[x][y]);
void inputstats(double[] methodstats)
{
}
但是你不妨咬紧牙关,为你的数据写一个合适的类:
class PlayerStats
{
public double PassAttempts { get; set; }
public double Completions { get; set; }
// etc ...
}
更简单的解决方案是:
public static void Main()
{
double[][][] stats = new double[3][2][10];
string[] players = new string[3];
players[0] = "Tom Brady";
players[1] = "Drew Brees";
players[2] = "Peyton Manning";
for (int player = 0; player < 3; ++player)
{
Console.WriteLine("Enter stats for {0}", players[ player ]);
for (int game = 0; game < 2; ++game)
{
Console.WriteLine("Game {0}", game + 1);
stats[player][game] = inputstats();
}
}
public static double[] inputstats()
{
//same code
}
几点注意事项。我使用了一个数组的数组而不是多维数组,以便可以将数组分配给stats[][]
(更多信息在这里(。此外,您应该使用更具描述性的迭代器变量(此处为玩家和游戏(并在本地限定它们的作用域。即在for
循环声明中声明它们。通常,变量的范围越局部越好。
编辑:根据Kevin DiTraglia的说法,您可以将数组分配给[,]
。但无论如何,[][][]
对我来说显然更快、更自然,来自 Java 和 C/C++