2017-06-20 12 views
2

私は学校の宿題に取り組んでいる学生です。私の問題は、1つの配列の長さに基づいて多数のユーザー入力を集め、それらの入力を同じ長さの新しい配列に戻そうとしていることです。 2番目の配列は、動的でなければならず、1番目の配列にいくつのユーザー入力があったかに基づいて変更する必要があるため、ハードコードすることはできません。ここに私のコードです。ユーザ入力を未定義の配列に戻しますか?

public static decimal[] PromptForDecimals(string[] array1) 
{ 
    for (int i = 0; i < array1.Length; i++) 
    { 
     Console.WriteLine(""); 
     string inputString = Console.ReadLine(); 
     decimal input; 
     while (!decimal.TryParse(inputString, out input)) 
     { 
      Console.WriteLine("Please enter a number value."); 
      inputString = Console.ReadLine(); 
     } 

     decimal[] inputArray; 
     inputArray[i] = input; 

     return inputArray; 

基本的に、私はarray1の文字列値に対応するようにdecimal値の配列を作成しようとしています。問題は、範囲外であるため、値を未定義の配列に追加できないことです。 inputArrayArrayListを使用しようとしましたが、無効なキャストエラーが発生します。

誰もが考えている?

答えて

0
public static decimal[] PromptForDecimals(string[] array1) 
    { 
     decimal[] inputArray = new decimal[array1.Length]; 
     for (int i = 0; i < array1.Length; i++) 
     { 
      Console.WriteLine(""); 
      string inputString = Console.ReadLine(); 

      decimal input; 
      while (!decimal.TryParse(inputString, out input)) 
      { 
       Console.WriteLine("Please enter a number value."); 
       inputString = Console.ReadLine(); 
      } 

      inputArray[i] = input; 

      return inputArray; 
0

これは使用できます。それがあなたのために働くことを願っています。

public static decimal[] PromptForDecimals(string[] array1) 
{ 
    decimal[] inputArray = new decimal[array1.Length]; 
    for (int i = 0; i < array1.Length; i++) 
    { 
     Console.WriteLine(""); 
     string inputString = Console.ReadLine(); 

     decimal input; 
     while (!decimal.TryParse(inputString, out input)) 
     { 
      Console.WriteLine("Please enter a number value."); 
      inputString = Console.ReadLine(); 
     } 

     inputArray[i] = input;     
    } 

    return inputArray; 
} 
0

まず、あなたはおそらくreturnの文とループの外inputArrayの宣言を置く必要があります。

第2に、inputArrayを作成するには、長さがinputArray.Lengthの配列を作成するだけです。 forループで

// remember to put this before the for loop. 
decimal[] inputArray = new decimal[inputArray.Length]; 

、あなたが書くことができます:forループの後

// don't redeclare inputArray again! 
inputArray[i] = input; 

を、inputArrayを返す:

return inputArray; 
0

は以下のソリューションです。

1)文decimal[] inputArrayでは、配列は宣言されていますが、作成されていません。

2)あなたはループに入る前に、あなたはそれを作成しなければなりません

3)以下に示すように、配列を作成するとき、あなたはinputArray

public static decimal[] PromptForDecimals(string[] array1) 
{ 
    decimal[] inputArray = new decimal[array1.Length]; 
    for(int i = 0; i < array1.Length; i++) 
    { 
     Console.WriteLine(""); 
     string inputString = Console.ReadLine(); 

     decimal input; 
     while(!decimal.TryParse(inputString, out input)) 
     { 
      Console.WriteLine("Please enter a number value."); 
      inputString = Console.ReadLine(); 
     } 
     inputArray[i] = input; 
    } 

    return inputArray; 
} 
0

としてそれを同じ要素数を与えることができ、あなたを作りますより簡単にLINQを使用してください。すべての配列を作成し、あなたが正しいインデックスを使用していることを確認することはあなたのために行われます。

public static decimal[] PromptForDecimals(string[] array1) 
{ 
    return 
     array1 
      .Select(x => 
      { 
       Console.WriteLine(x); 
       string inputString = Console.ReadLine(); 
       decimal input; 
       while (!decimal.TryParse(inputString, out input)) 
       { 
        Console.WriteLine("Please enter a number value."); 
        inputString = Console.ReadLine(); 
       } 
       return input; 
      }) 
      .ToArray(); 
} 
関連する問題