2013-08-29 75 views
0
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個數據。 HALP!C#返回數組問題

+2

您應該創建一個類來模擬玩家的統計信息並在該類的實例中設置屬性,而不是傳遞數組。 –

+0

創建一個類併爲其建模 - 請參閱http://msdn.microsoft.com/en-us/library/0b0thckt(v=vs.110).aspx關於如何聲明類的優秀示例和教程 – jdphenix

回答

0

你必須在該行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 ... 
} 
+0

在發佈之後,我意識到鋸齒陣列會更好。但是我卻一起拿出了方法,只是插入了方法中的數據,並取出了int z。它的工作原理與我預期的一樣,並且更容易。我只使用一種方法的原因是,對於這項任務,我不得不使用一種方法,但是我可以通過計算來完成這兩項比賽的平均數。我很感激你的帖子,它幫助了很多! –

0

一種更簡單的解決方案將是:

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循環聲明中聲明它們。一般來說,變量的局部範圍越多越好。根據凱文DiTraglia你可以指定一個數組[,]。但無論如何[][][]顯然更快,也更自然,我來自Java和C/C++