[英]create array of negative integers
試圖將所有負整數放入數組
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的控制台輸出給出正確的大小。 謝謝你的幫助
int[] na = new int[0];
↑
na
的大小為0,它根本不能包含任何元素。 做:
int[] na = new int[a.length];
並在方法之外執行此操作。
如果希望大小相同,則必須使用ArrayList
:
ArrayList<Integer> na = new 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循環中具有count即可。
for(int j=0; j< count; j++)
//....
最后,我建議盡可能使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.