簡體   English   中英

創建負整數數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM