这是关于前一段时间发布的问题 Remove -1 entry from integer array
我知道有一些非常快速的解决方案,一行回答在上一篇发布的问题的答案部分中发布,但是我尝试通过for循环做新手。
int[] arr = new int[]{ 1, -1, -1, 1 };
int[] new_arr;
int index = 0;
for (int i = 0; i < arr.Length; i++)
{
// Console.WriteLine(arr[i]);
if (arr[i] == -1)
continue;
else
new_arr[index++] = arr[i];
}
我收到错误
使用未分配的局部变量'new_arr'
我做错了什么。
修改
int[] arr = new int[]{ 1, -1, -1, 1 };
int[] new_arr = new[arr.Length]; //Error being shown at this line
int index = 0;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == -1)
continue;
else
new_arr[index++] = arr[i];
}
for(int j=0;j<new_arr.Length;j++)
Console.WriteLine(new_arr[j]);
答案 0 :(得分:5)
编译器警告您尚未初始化new_arr
变量,以后不能使用它:
int[] new_arr = new int[arr.Length];
在这种情况下,我正在将new_arr
数组初始化为与arr
数组相同的大小。
答案 1 :(得分:3)
您尚未初始化数组new_arry
。您需要指定其大小。
int[] new_arr = new int[10];
您正在执行的代码内部:
new_arr[index++] = arr[i];
这里由于数组尚未初始化并且您正在尝试使用它,这就是您收到此错误的原因。
您可以使用List<int>
代替数组,因为您似乎不确定代码中数组的大小。
所以你的代码是:
int[] arr = new int[]{ 1, -1, -1, 1 };
List<int> tempList = new List<int>();
int[] new_arr;
int index = 0;
for (int i = 0; i < arr.Length; i++)
{
// Console.WriteLine(arr[i]);
if (arr[i] == -1)
continue;
else
tempList.Add(arr[i]);
}
new_arr = tmepList.ToArray();
或者完整的代码可以缩短为:
int new_arr = arr.Where(r=> r!= -1).ToArray();
答案 2 :(得分:1)
您尚未分配变量new_arr。因此它显示错误。你的代码可以是这样的 -
int[] arr = new int[] { 1, -1, -1, 1 };
int[] new_arr = new int[4];
int index = 0;
for (int i = 0; i < arr.Length; i++)
{
// Console.WriteLine(arr[i]);
if (arr[i] == -1)
continue;
else
new_arr[index++] = arr[i];
}
for (int i = 0; i < new_arr.Length; i++)
{
Console.WriteLine(new_arr[i]);
}
您不能在c#中使用任何未分配或悬空的变量。不要将new_arr指定为null。它将抛出null引用异常。