创建负整数数组

时间:2014-03-26 16:33:22

标签: java arrays

尝试将所有负数整数放入数组

int[] a = {1,2,3,-4,-5,-5,-9};

进入单独的数组,此代码生成超出界限的数组'不知道为什么

    int[] negatives(int[] a){
    int count = 0;
    int[] na = new int[0];
    for(int i=0;i<a.length;i++){
        if(a[i]<0){
            count++;
            na=new int[count];
            a[i] = na[i];
        }
    }

         System.out.print(na.length);//<-shows correct size for resulting array

    return na;
}

na.length的控制台输出给出了正确的大小。 谢谢你的帮助

4 个答案:

答案 0 :(得分:2)

int[] na = new int[0];
                   ↑

na的大小为0,它根本没有元素。做:

int[] na = new int[a.length];

在方法之外做这件事。

如果您希望尺寸相同,则必须改为使用ArrayList

ArrayList<Integer> na = new ArrayList<>();

填充后,您可以轻松将其转换回阵列。

答案 1 :(得分:0)

虽然您的代码在几个方面看起来有误,但我相信这些是导致异常的行:

        na=new int[count];
        a[i] = na[i];

您正在使用na元素为count创建数组;然后在下一行,您将访问该数组的元素ii将是&gt; = count,因此访问权限超出范围。

另外值得注意的是,你创建的数组是未初始化的,所以即使索引没有超出界限,你实际上只是将{0}分配给a[i]

答案 2 :(得分:0)

在上一个答案中遇到了一些问题,每找到一个新的负整数重新分配一个新数组根本就没有效率,特别是考虑到你需要复制&#34; old&#34; na值进入新分配的na以保持运行总计..​​.

要回答你的问题,要避免超出界限,

na[count-1]=a[i];

但是,就像之前的评论所提到的那样,首先创建一个等于&#34; a&#34;然后您可以根据需要添加元素,而无需创建新数组并复制元素。

最后,不是打印na.length而是打印出计数。如果想要负值,只需在for循环中计数就有最大条件。

for(int j=0; j< count; j++)
//....

最后,如果可能的话,我建议使用ArrayList而不是数组。

答案 3 :(得分:0)

这是一种方法,可以不用担心数组的大小,还会返回一组int。

int[] negatives(int[] a){

   ArrayList<Integer> negatives = new ArrayList<Integer>();

    for(int i=0;i<a.length;i++){
        if(a[i]<0){
            negatives.add(a[i])
        }
    }

    int[] na= negatives.toArray(new int[negatives.size()]);
    return na;
}
相关问题