簡體   English   中英

C#方法返回數組問題

[英]C# Method returning array issue

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狀態,游戲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)

您的輸入法會收集一個雙精度數組,而當前的數組形式是不可能的。 您將不得不使用鋸齒狀的數組(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 ...
}

一個更簡單的解決方案是:

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 ++來說顯然更快,更自然

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM