0

这是关于前一段时间发布的上一个问题 从整数数组中删除 -1 条目

我知道有非常快速的解决方案,在前面发布的问题的答案部分中发布了一行答案,但是作为一个新手,我尝试通过 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]);
4

3 回答 3

5

编译器警告您尚未初始化new_arr变量并且以后不能使用它:

int[] new_arr = new int[arr.Length];

在这种情况下,我将数组初始化为与new_arr数组相同的大小arr

于 2012-10-11T06:56:54.110 回答
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();
于 2012-10-11T06:56:50.193 回答
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。它会抛出空引用异常。

于 2012-10-11T07:23:40.950 回答