尝试将所有负数整数放入数组
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的控制台输出给出了正确的大小。 谢谢你的帮助
答案 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
创建数组;然后在下一行,您将访问该数组的元素i
。 i
将是&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;
}