【问题标题】:C# Method returning array issueC#方法返回数组问题
【发布时间】:2013-08-29 17:01:18
【问题描述】:
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;
    }
}

这是我到目前为止的代码。请记住,我是非常初学者。我正在尝试创建一个控制台,该控制台将在 2 个游戏中要求 3 个不同玩家的用户输入。一旦我得到用户输入的所有数据,我将继续添加提示用户显示游戏 1 statline、游戏 2 statline 或两个游戏平均值的功能。 现在我坚持只是得到输入。我收到一个错误,其中粗体和斜体显示最佳重载方法匹配有一些无效参数。我在这里搞砸了什么?我很确定它在 z 中,但我不太确定如何将它输入到 10 个统计数据的数组的第三维中。哈!

【问题讨论】:

  • 你应该创建一个类来模拟玩家的统计数据并在该类的实例中设置属性,而不是传递数组。
  • 创建一个类并在其中建模一个播放器 - 请参阅 msdn.microsoft.com/en-us/library/0b0thckt(v=vs.110).aspx 以获取有关如何声明类的优秀示例和教程

标签: c# arrays methods


【解决方案1】:

您在该行有 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)

您的输入法收集了一个双精度数组,这在您当前的数组形式中是不可能的。您将不得不使用锯齿状数组(array-of-array-of-array:

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 ...
}

【讨论】:

  • 发布后,我意识到锯齿状数组会更好。但相反,我将方法全部取出并插入方法中的数据,然后取出 int z。它的工作方式与我预期的完全一样,而且更容易。我使用方法的唯一原因是,对于这项作业,我还必须使用一种方法,但我可以通过计算来建立两场比赛的平均值。非常感谢您的帖子,它对您有很大帮助!
【解决方案2】:

一个更简单的解决方案是:

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[][]More Info Here)。此外,您应该使用更具描述性的迭代器变量(此处为玩家和游戏)并在本地范围内限定它们。那就是在for 循环声明中声明它们。一般来说,变量的作用域越局部越好。

编辑: 根据 Kevin DiTraglia 的说法,您可以将数组分配给 [,]。但无论如何,[][][] 对于来自 Java 和 C/C++ 的我来说显然更快、更自然

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2013-11-25
    • 2022-01-21
    • 2023-03-09
    • 2011-05-22
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多