0

これは少し前に投稿された以前の質問に関するものです 整数配列から -1 エントリを削除します

以前に投稿された質問への回答セクションに投稿されたように、非常に高速なソリューション、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>コード内の配列のサイズがわからないため、 array の代わりに使用できます。

したがって、コードは次のようになります。

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 に割り当てないでください。null 参照例外をスローします。

于 2012-10-11T07:23:40.950 に答える