2012-03-27 8 views
-1

私はプログラミングが初めてですが、私はPythonのコースを受け取り、自分でC#を学んでいます。私はこの質問が答えられたことを認識しますが、私は答えを理解することができませんでした。別のメソッドで配列を使う

編集:申し訳ありませんが、私の質問をより詳しく説明しようとします。新しい方法では、2DアレイCPUのすべての値を使って3D配列を作成したいと考えています。だから私はCPUを新しいメソッドに渡したいので、新しい3D配列にコピーしてその内容を変更することができます。

だから私は....

public string pickRoles(string name) 

の方法を持っていると私はそこにそれを使用することができますので、私は新しいメソッドに配列をコピーするにはどうすればよいこの配列

string[,] CPU = new string[6, 2] 
      { 
       { (names[index]), (cpu_1_role) }, 
       { (names[index]), (cpu_2_role) }, 
       { (names[index]), (cpu_3_role) }, 
       { (names[index]), (cpu_4_role) }, 
       { (names[index]), (cpu_5_role) }, 
       { (names[index]), (cpu_6_role) }, 
      }; 
return CPU[6, 2]; 

がありますか?そして、たくさんのメソッドを持つ代わりに、いつ新しいクラスを作成するべきですか?私の答えを詳しく説明してください。ありがとう!

+0

あなたの質問の先頭に 'C#'という接頭語を付ける必要はありません。それはタグのためです。 – payo

+0

どのような答えが見つかりましたか、それをリンクできますか? – payo

+3

配列にメッセージを渡すことはできますが、配列への「コピー」は明確ではありません。あなたは正確に何を達成しようとしていますか?ちなみに、インデックスはゼロベースなので、 'CPU [6、2]'は範囲外です。 'CPU [5、1]'は最後の要素です。 – recursive

答えて

1

質問は混乱していますが、配列を返すと、別の方法でそれを使用し、string[,]pickRolesの戻り値の型を変更する場合:

public void Foo() 
{ 
    string[,] CPU = pickRoles("Foo"); 
} 

public string[,] pickRoles(string name) 
{ 
    string[,] CPU = new string[6, 2] 
    { 
      { (names[index]), (cpu_1_role) }, 
      { (names[index]), (cpu_2_role) }, 
      { (names[index]), (cpu_3_role) }, 
      { (names[index]), (cpu_4_role) }, 
      { (names[index]), (cpu_5_role) }, 
      { (names[index]), (cpu_6_role) }, 
    }; 
    return CPU; 
} 
+0

メインでCPUを宣言したようですね? これをフォーマットする方が良いでしょうか?私は使用されている同じメソッドで宣言された一連の変数を持っており、何かを見つけるためにたくさんのコメントをつける必要があります。 しかし、「return CPU [6,2];」を変更した場合、 「CPUを返す」; 「文字列[*、*] 'を暗黙的に' string 'に変換できません」 – Thumbtack

+0

これは、メソッドの戻り値の型を 'string [、]'に変更する必要があるためです。 。宣言に関しては、例のために配列を 'pickRoles'メソッドの中でローカルに宣言し、配列を呼び出したメソッド( 'Foo')に返しました。 –

0

私はに配列をコピーするにはどうすればよいです私はそれを使用することができます新しいメソッド?

どうやって配列を返すのですか?

あなたは右の戻り値の型記述する必要があります。

public string[,] pickRoles(string name) 

をそして、あなたは、この場合には、ポインタを返す必要があり、全体の配列を返すために:

return CPU; 
+0

これは私が探していたようです。しかし、私はポインタについて何も理解していませんが、変数自体ではなく、変数のメモリ位置を参照しています。 – Thumbtack

+0

はい、配列のメモリ位置を参照します。 'string [、] newArray = pickRoles(" Example ");'ここで 'newArray'は' CPU'を参照します。つまり、配列のすべての値を渡すわけではありませんが、どちらも同じメモリ位置を指しており、同じデータを取ります。 –

0

あなたはメソッドがクラス内で宣言されている場合と、配列がクラスのメンバである場合、メソッドはそのメンバに直接アクセスできる必要があります。それらが同じクラスにない場合は、配列をパラメータとしてメソッドに渡すことができます。メソッドが配列を生成することになっている場合は、戻り値の型を変更して配列を返すことができます。

ちなみに、あなたがしようとしていることは、文字列名に関連付けられたcpu_ x _roleがうまくいくと思います。あれは正しいですか?そのような場合は、2D配列ではなく、辞書を見たいと思うかもしれません。

+0

実際、元の方法では、プログラムは名前のリストを持ち、それをCPU [x、0]に格納します。次に、スイッチケースによってcpu_x_roleを決定し、それをCPU [x、1]に格納する。今では、それぞれの役割がその役割に基づいて実行することができる対話(私は対話によって私はconsole.writeline();を意味する)の束を保存する方法を考えようとしています。 – Thumbtack

関連する問題