2017-04-21 5 views
-1

cが配列の長さから1を引いたとき、プログラムは以下のコードでarray[c]を返すと思うのはなぜですか?私のプログラムが今でもうまく実行されているかどうかはわかりません。配列から関数を返す(構文エラー:期待値)

P.S私はTrial and Errorによってコードの最後の行に到着し、期待通りに機能しました。私はちょうど方法を知らない!あなたがintないint[]を戻ってきているので

static void Main(string[] args) 
     { 
      int[] array = new int[] { 1, 5, 3, 4, 2 }; 
      //Reverse an Array 
      arrayReverse(array); 
      //Display Array Elements 
      foreach (int x in array) 
       Console.WriteLine(x); 
      Console.ReadLine(); 
     } 
+0

戻り値は使用されません。 int []は参照型であり、リターンせずに変更できます。 –

+2

なぜ車輪を改造するのですか? 'int [] array = new int [] {1、5、3、4、2}; Array.Reverse(array); ' – fubo

+0

組み込み関数を使用したくない場合 –

答えて

3

public static int arrayReverse(int[] array) 
     { 
      int c = array.Length - 1, b; 
      for (int i = 0; i < (array.Length/2); i++) 
      { 
       b = array[i]; 
       array[i] = array[c]; 
       array[c] = b; 
       c--; 
      } 
      return array[c]; 
     } 

私の主な機能は次のようになります。ここでは、これを試してみる:

public static int[] arrayReverse(int[] array) 
{ 
     int c = array.Length - 1, b; 
     for (int i = 0; i < (array.Length/2); i++) 
     { 
      b = array[i]; 
      array[i] = array[c]; 
      array[c] = b; 
      c--; 
     } 
     return array; 
} 

をまた、あなたは今すぐmain

array = arrayReverse(array); 

で返された配列をバックに割り当てるされていない、あなたが要素を書いているので、あなたは、まったくの配列を返す必要はありません。新しい配列を割り当てないでください。

ここでは、In-Placeと新しい配列の実装のコードを見つけてください。それをデバッグする - 紙にコードを書いて何が起きているのかを分析しよう。

static void Main(string[] args) 
{ 
    try 
    { 
     int[] array = new int[] { 1, 5, 3, 4, 2 }; 

     //Reverse copy of Array 
     var newarr = arrayReverseNewArray(array); 

     //Display New Array Elements 
     foreach (int x in newarr) 
      Console.Write(x + ","); 

     Console.WriteLine(""); 

     //Reverse original Array 
     arrayReverseinPlace(array); 

     //Display original Array Elements 
     foreach (int x in array) 
      Console.Write(x + ","); 
     Console.ReadLine(); 

    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 


private static void arrayReverseinPlace(int[] array) 
{ 
    for (int i = 0; i < array.Length/2; i++) 
    { 
     int tempvar = array[i]; 
     array[i] = array[array.Length - i - 1]; 
     array[array.Length - i - 1] = tempvar; 
    } 
} 

private static int[] arrayReverseNewArray(int[] array) 
{ 
    int[] arr = new int[array.Length]; 
    int j = 0; 
    for (int i = array.Length - 1; i >=0 ; i--) 
    { 
     arr[j] = array[i]; 
     j++; 
    } 
    return arr; 
} 

ここにはRunning Sample Codeがあります。

+0

関数を呼び出すときに返される値も無視されます。おそらく、彼はC#の_good_チュートリアルを読む必要があります。 –

+0

ありがとう!なぜ 'array [c]'は大丈夫ですが、 'array [array.length]'や 'array []'ではないのでしょうか? –

+0

'array [array.length]' int.array []が宣言である場合に動作するはずです – Sadique

関連する問題