Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建负整数数组_Java_Arrays - Fatal编程技术网

Java 创建负整数数组

Java 创建负整数数组,java,arrays,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[] 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;
}
int[]否定(int[]a){
整数计数=0;
int[]na=新的int[0];
对于(int i=0;i
na
的大小为0,它可以没有任何元素。请执行以下操作:

int[] na = new int[a.length];
并在方法之外执行此操作

如果希望大小相同,则必须使用:

ArrayList na=新的ArrayList();

填充后,您可以很容易地将其转换回数组。

尽管您的代码在几个方面看起来都是错误的,但我相信这些是导致异常的原因:

        na=new int[count];
        a[i] = na[i];
您正在使用
count
元素为
na
创建一个数组;然后在下一行访问该数组的元素
i
。在这种情况下,
i
将>=
count
,因此访问是不受限制的


另外值得注意的是,您创建的数组是未初始化的,因此即使索引没有超出范围,您实际上只是将0分配给
a[i]

在上一个答案中,根据找到的新负整数重新分配一个新数组根本没有效率,特别是考虑到您需要将“旧”na值复制到新分配的na中以保持一个运行的总计

为了回答你的问题,为了避免越界例外

na[count-1]=a[i];
但是,就像前面提到的注释一样,首先创建一个等于“a”大小的数组,然后您可以根据需要添加元素,而无需创建新数组并复制元素

最后,不用打印na.length,只需打印出count。如果需要负值,只需在for循环中使用have count就可以得到max条件

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

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

这里有一种方法可以做到这一点,而不用担心数组的大小,并且仍然返回一个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;
}
int[]否定(int[]a){
ArrayList negatives=新的ArrayList();

对于(int i=0;iHe不知道数组中有多少个负片。问题是他在每次迭代时都会重新定义数组。但是最多可能有
a.length
负片。谢谢,但生成的数组是a.length大小,应该是na.size。@Marounnarraylist绝对是最好的解决方案。您甚至可以将容量设置为a.length,这样就保证永远不会复制数组。注意,他仍然必须返回一个
int[]
。toArray将给出一个
整数[]
,我不确定java 7是否会将其转换为
int[]
最好将.length传递给ArrayList构造函数,以保证数组不会被复制。这段代码需要做更多的工作:(您不能将整数的ArrayList转换为原始整数的数组-感谢所有建议,我知道您对我的错误有了更好的理解。
for(int j=0; j< count; j++)
//....
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;
}