2017-04-21 107 views
-1

爲什麼程序期望我在下面的代碼中返回array[c]c是數組減1的長度?我似乎無法追蹤我的程序如何能夠順利執行。從函數返回數組(語法錯誤:值預期)

P.S我通過Trial and Error得到了最後一行代碼,它按預期工作。我只是不知道如何!

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]; 
     } 

我的主要功能如下:

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

因爲你是返回一個int不是int[]。在這裏,嘗試了這一點:

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); 

分配回返回數組現在,你並不需要在所有返回數組,因爲你寫的元素到位並且不分配新陣列。

在這裏,請查找就地和新陣列實現的代碼。調試它 - 在紙上寫代碼嘗試分析發生了什麼。

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

謝謝!我想知道爲什麼'數組[c]'沒問題,但不是'數組[數組] [或]數組[]'? –

+0

'數組[array.length]'應該工作,如果你返回int.array []是一個聲明 – Sadique