2017-04-21 103 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