2 回答
TA贡献1783条经验 获得超4个赞
class Solution
{
static int[] foo(int[] array)
{
int[] xx = new int[array.Length]; // Building this but not using it
for (int i = 0; i < array.Length; i++)
{
array[i] *= 2; //Altering the input array changes the array in the Main method..
Console.WriteLine(array[i]);
}
return array;
}
static void Main(string[] args)
{
int[] array = new int[4] { 73, 67, 38, 33 };
foo(array); // Not assigning the values to an object.
//After this step look at array it will be 146, 134, 76 , 66
}
}
所以你正在改变 foo 方法中的原始数组。您正在传递数组对象,然后覆盖这些值。
您声明了一个新的 int[] xx 但随后什么都不做,我认为您应该将源数组复制到新的 xx int[]。这样做不会改变主方法中的原始整数。然后,您可以在 main 方法中分配新数组的返回值。下面的例子:
class Solution
{
static int[] foo(int[] array)
{
int[] xx = new int[array.Length];
//Copy the array into the new array
Array.Copy(array, xx, array.Length);
for (int i = 0; i < xx.Length; i++)
{
xx[i] *= 2;
Console.WriteLine(xx[i]);
}
return xx;
}
static void Main(string[] args)
{
int[] array = new int[4] { 73, 67, 38, 33 };
//Assign the new array to an object
int[] newArray = foo(array);
}
}
编辑:我还看到您在顶部包含了 linq,如果您对使用 linq 感兴趣,这将获得相同的结果:
static void Main(string[] args)
{
int[] array = new int[4] { 73, 67, 38, 33 };
int[] newarr = array.Select(arrayvalue => arrayvalue * 2).ToArray();
}
TA贡献1906条经验 获得超3个赞
您当前的代码确实返回一个数组,但您是:
更新值
array
而不是新xx
数组不分配返回值
Main
这是您修改现有数组而不是新数组的地方:
static int[] foo(int[] array)
{
int[] xx = new int[array.Length];
for(int i = 0; i < array.Length; i++)
{
// NOTE: modifying array, not xx
array[i] *= 2;
Console.WriteLine(array[i]);
}
// NOTE: returning array, not xx -- xx is not used
return array;
}
这是返回数组的缺失赋值:
static void Main(string[] args)
{
int[] array = new int[4] {73, 67, 38, 33 };
// You are not assigning the returned array here
int[] newArray = foo(array);
}
ref如果您需要更改数组大小,您的另一个选择是将数组作为参数传递:
static int[] foo(ref int[] array)
{
// Modify array as necessary
}
- 2 回答
- 0 关注
- 177 浏览
添加回答
举报