2017-03-19 8 views
0

配列を使用してリストを使用する必要がある代入があります。私は2つの問題があります。ユーザーが入力を行うたびに、配列の長さ、playerNumberが1つ増えて、不定である必要があり、配列をメインメソッドに戻す必要があるということです。以下のコードは一度だけ動作し、2番目の入力を入力しようとするとプログラムがクラッシュします。配列の長さを増やして渡す配列番号#

 int x = 0; 
     string answer = "yes"; 

     string[] playerNumber = new string[] {}; 
     while (answer == "yes") 
     { 
      Console.Write("Enter a number : "); 
      string y = Console.ReadLine(); 
      playerNumber = new string[] { y }; 

      playerNumber[x-1] = y; 
      x++; 
      Console.Write("Enter another number : "); 
      answer = Console.ReadLine(); 

      Console.WriteLine(); 
     } 
+0

ここでは 'Array.Resize'メソッドが必要です –

+0

この配列をメインメソッドに戻すことはできますか? – HyperPXLZ

答えて

0

あなたのやりたいことははっきりしません。 まず、インデックスが範囲外です。 あなたのしていること:playerNumber[x-1]しかし、x == 0、だから例外が発生します。これがコードが失敗する唯一の理由です。 2番目のループでplayerNumberが再びサイズ1の配列になりますが、xの値が2になり、もう一度範囲外になるので、++x;を1行上にすると失敗します。

第2に、whileループの外側と内側の両方で配列を初期化しています。あなたは外側の初期化を使用していません(そして内側のものは必要ありません - もう一度、達成しようとしているものに依存します)。あなたはansweryesまたはnoになりたい場合は、あなたのConsole.Writeでそれを指定します。

第三に、あなたは、ユーザーに正しい指示を与える必要があります。私はあなたがやろうとしていたものを推測するために管理している場合、あなたが尋ねたよう

だから、ここでは、Array.Resizeの使い方(この文脈では非常に非効率的である)、および配列を返すなど、いくつかの変更、とあなたのコードです:

using System; 

public class Test 
{ 
    public static string[] MyFunc() 
    { 
     int x = 1; 
     string answer = "yes"; 

     string[] playerNumber = new string[x]; 
     while (answer == "yes") 
     { 
      Console.Write("Enter a number : "); 
      string y = Console.ReadLine(); 

      playerNumber[x-1] = y; 
      x++; 
      Array.Resize(ref playerNumber, x); 

      Console.Write("Would you like to enter another number? (yes/no)"); 
      answer = Console.ReadLine(); 

      Console.WriteLine(); 
     } 

     return playerNumber; 
    } 

    public static void Main() 
    { 
     Console.WriteLine(MyFunc()[0]); // prints the first string 

    } 
} 
+0

今は大丈夫です。私は誰かが私に言ったサイズ変更方法を使って私が望むようにそれを働かせました。また、whileループの代わりにdo whileループを単独で使用するほうがよいことがわかります。 – HyperPXLZ

+0

どのようにIndexOutOfRangeExceptionにアプローチしましたか?私が言ったように、それはあなたの主な問題でした。あなたは私の答えを読んだのですか?これには、Array.Resizeの記述やこのコンテキストの非効率性など、いくつかの情報があります。 – HeyJude

+0

最初にxの値を1と指定し、ユーザーが名前を入力すると、x-1に配置されます。その後、xの値に1を加え、Array.Resizeメソッドを使用して、配列の長さをxの長さに変更して、ユーザーが入力した数を入力できるようにしました。 – HyperPXLZ

関連する問題