1

我有一个数组,数字范围从 -100 到 100。现在,我必须创建一个方法,将正数复制到另一个数组中。我做的:

static int[] ArrayCopy(int[] t)
    {
        int a = 0;
        int[] g = new int[0];
        for (int i = 0; i < t.Length; i++)
        {
            if (t[i] > 0)
            {

                g[a] = t[i];
                a++;

            }

        }
        return g;

     }

该程序以 IndexOutOfRange 终止,我不明白。

4

2 回答 2

2

您正在g使用零大小初始化数组。运行开始后,您尝试访问g特定索引 - 该索引不存在。g我假设您希望通过以下方式初始化您的数组:

int[] g = new int[t.Length];
于 2014-02-28T15:20:24.643 回答
1

你需要2个循环。一个来计算有多少正面,然后一个来复制它们。

static int[] ArrayCopy(int[] t)
{
    int numPositives = 0;
    for(int i = 0 ; i < t.length ; i++)
    {
        if(t[i] > 0)numPositives++;
    }

    int[] newArray = new int[numPositives];
    int curPositive = 0;

    for(int i = 0 ; i < t.length ; i++)
    {
        if(t[i] > 0)
        {
             newArray[curPositive] = t[i];
             curPositive++;
        }
    }

    return newArray
}
于 2014-02-28T15:29:11.580 回答