2012-02-06 5 views
0

特定のコードを探しているわけではなく、情報とガイダンスを探しています。私は学びたいが、誰かがそれをコード化しないようにしたい。あるメソッドから2つの配列を渡して別のメソッドからユーザー情報を収集するC#

2つの配列を別々のメソッドに渡してユーザー入力を満たす方法を探しています。私はこれを理解することができないと私はテキストと講義だけでなく、様々なサイトを研究し、これを行うために必要な技術を見つけることができません。私は、1つの配列を別のメソッド(IEのavg/sumなど)に渡す方法を知っていますが、1つの別のメソッドから2つの配列を埋める方法はありません。どんな指導や情報も高く評価されます。これは私が今までに持っているもの、あるいはむしろ私が残したものです。私は他の方法をかなり完成させました。デバッグ段階に移行するには、この部分が必要です。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace PhoneDial 
{ 
    class Program 
    { 


     // Get player names and their scores and stores them into array for an unknown number of players up to 100 
     static void InputData(string[] nameList, int[]playerScore) 
     { 
      string userInput; 
      int count = 0; 

      do 
      { 
       Console.Write("\nEnter a players name: "); 
       userInput = Console.ReadLine(); 
       if (userInput != "Q" && userInput != "q") 
       { 
        nameList[0] = Console.ReadLine(); 
        ++count; 

       } 
       else break; 

       Console.WriteLine("Enter {0}'s score:", userInput); 
       playerScore[0] = Convert.ToInt32(Console.ReadLine()); 


      } while (userInput != "Q" && userInput != "q"); 


     } 

     //Declare variables for number of players and average score and two arrays of size 100 (one for names, one for respective scores 
     //Calls functions in sequence, passing necessary parameters by reference 
     //InputData(), passing arrays and number of players variable by reference 
     //DisplayPlayerData(), passing arrays and number of players by reference 
     //CalculateAverageScore(), passing arrays and number of players by reference. Store returned value in avg variable 
     //DisplayBelowAverage(), passing arrays and number of players variable by reference, passing average variable by value 
     static void Main(string[] args) 
     { 
      string[] nameList = new string[100]; 
      int[] playerScore = new int[100]; 
      int count = 0, avg = 0; 

      InputData(nameList, playerScore); 


     } 
+0

2つの配列を保持するクラスを作成する方法はありますか?次に、あなたの好きなところでこれを渡すことができます... –

+0

'static void InputData(ref string name、ref int score)' static void InputData(string [] name、int [] score、ref int numberOfPlayers) ' –

+0

クラスを作成するとmain()からそれを削除しますか? – user1174357

答えて

3

あなたの質問は、必ずしも明らかではないが、充填する私が理解から、この方法で配列を宣言するために、別のメソッドに渡す、あなただけが必要です。

public void MethodA() 
{ 
    string[] stringArray = new string[100]; 

    MethodB(stringArray); 
} 

public void MethodB(string[] stringArray) 
{ 
    // Fill the array 
    stringArray[0] = "Hello"; 

    // ... 
} 

しかし、変数参照をメソッドに渡してそのメソッドに配列を作成させたい場合は、refキーワードを使用することをお勧めします(標準変数s)を配列変数に追加します。これと同じように:配列でこれら2つのアプローチのいずれかを行うには

public void MethodA() 
{ 
    string[] stringArray; 

    MethodB(ref stringArray); 

    // Array is now created and filled 
} 

public void MethodB(ref string[] stringArray) 
{ 
    // Create the array 
    stringArray = new string[100]; 

    // Fill the array 
    stringArray[0] = "Hello"; 

    // ... 
} 

は同じですが、追加パラメータです。すなわち:

public void MethodB(string[] array1, int[] array2) { } 

public void MethodB(ref string[] array1, ref int[] array2) { } 
+0

Ahhh、ありがとう、私はこれが私が探していたものだと思います。 – user1174357

+0

あなたの最初の方法を示すためにコードを更新しました、それは正しい方法でしょうか?また、 2つ目の方法は配列の値を変更するのですか? – user1174357

+0

いずれの方法を使っても、配列に格納されている値を変更することができます。ただし、2番目の方法([ref'](http://msdn.microsoft.com/en-us/library/14akc2c7(v = vs.71).aspx)キーワードを使用する方法)は、参照によって配列を渡します。これは、値だけではなく、変数を参照して変数を初期化できることを意味します。 –

1

あなたは(変数が静的にし、それらのリストを作ることを忘れてはいけない)クラスプログラム{の下にそれらを置くことによって、変数NAMELISTとplayerScoreをグローバルにすることができます。

次に、入力データに.addメソッドを使用して、2つの変数に追加値を追加します。

おそらく2つの配列の代わりに辞書を使用することもお勧めします。

これは役に立ちました

+0

どちらの方法も私にはうってつけです。コード内のコミッションはラボプロジェクトの指示です。私たちは辞書をまだカバーしていません。もし私が誤解されていなければ、それらをグローバルにMain()から持ち出すことはありませんか? – user1174357