2012-02-15 69 views
4

在Java中,有沒有一種方法可以將值不是添加到特定索引,而是添加到下一個未聲明的索引?說:Java數組,將項添加到下一個空索引

int[] negativeArray = new int[21]; 
int[] positiveArray = new int[21]; 

有兩個陣列爲兩個不同類型的整數,例如負值和正值。我正在循環閱讀,我希望它像堆棧一樣工作(我不太瞭解堆棧,但據我所知,你不會瀏覽它的索引,只需將它們彈出/推送到它)如果其爲負數,則將該數字放入負數組中的下一個未聲明的索引點中。

我想到一種方法來做到這一點與一些額外的代碼。我將數組中的所有值都設置爲0.當檢查變量是否爲正值時,我將循環訪問下一個爲0的值。一旦找到它,我就知道我在找什麼索引。這需要一點點努力,有沒有更簡單的方法來做到這一點?


編輯:有些評論指出不使用基本數組的方式。我被分配了這個,並且我被要求使用一個數組來獲得功勞...

+3

你不能使用列表嗎? – assylias 2012-02-15 16:05:02

+0

@assylias哦我從來沒有使用過其中之一,我會嘗試一下。但事情是,我需要使用一個數組,因爲它是一個學校任務。 – Gabe 2012-02-15 16:05:46

+0

...或java.util.Stack? – aioobe 2012-02-15 16:05:52

回答

5

如果您在實際使用數組作爲一個堆棧(因此,只能添加或刪除堆棧頂部的項目),那麼你可以繼續在另一個變量的下一個免費數組中的索引。

int[] array = new int[21]; 
int nextIndex = 0; 

public void push(int e) { 
    array[nextIndex] = e; 
    ++nextIndex; 
} 

public int pop() { 
    --nextIndex; 
    return array[nextIndex]; 
} 

如果清除可以在任何地方發生,那麼我沒有看到比遍歷數組上找到一個免費的現場更好的解決方案。

+0

@aarg啊簡單的解決方案^ _ ^非常感謝你 – Gabe 2012-02-15 16:08:32

+0

元素在[ nextIndex]後,你呢?會泄漏嗎?我認爲這個例子出現在Effective Java中。如果我們在pop方法中添加某些東西以使nextIndex中的元素無效,那麼更好。 – Random 2012-02-15 16:39:00

+1

@Random:在我們存儲對象的情況下,如果我們沒有將它從數組中移除,對象將不會被垃圾收集。這對於整數(以及其他基本類型)來說不是問題,但是因爲您要寫入的「null」(aka 0)取而代之的是相同數量的內存。 – ARRG 2012-02-15 16:52:23

2

這就是爲什麼List已經被創建。只需使用這樣的事情:

List<Integer> negativeIntegers = new ArrayList<Integer>(21); 
... 
negativeIntegers.add(-127); 
+0

再次閱讀我的問題,我編輯了它 – Gabe 2012-02-15 16:07:40

0

退房http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html

它確實基本相同ARRG的解決方案,但與更少的代碼:

Stack<Integer> negative = new Stack<Integer>(); 
Stack<Integer> positive = new Stack<Integer>(); 

public void putMyNumber(int number) { 
    // Taking 0 as "positive" 
    if (number >= 0) { 
    positive.push(number); //Auto-boxing 
    return; 
    } 
    negative.push(number); 
} 
0

如果你想創建一個具有正值陣列和一個帶負值,你可以用你提出的算法來做:

public static void main(String[] args) throws Exception { 
    int[] negativeArray = new int[3]; 
    int[] positiveArray = new int[3]; 

    int[] test = new int[] {1, -1, 2, -2, 3, -3}; 

    int posIndex = 0; 
    int negIndex = 0; 

    for (int i = 0; i < test.length; i++) { 
     if (test[i] > 0) { 
      positiveArray[posIndex++] = test[i]; 
     } else if (test[i] < 0) { 
      negativeArray[negIndex++] = test[i]; 
     } 
    } 

    System.out.println(Arrays.toString(test)); //[1, -1, 2, -2, 3, -3] 
    System.out.println(Arrays.toString(positiveArray)); //[1, 2, 3] 
    System.out.println(Arrays.toString(negativeArray)); //[-1, -2, -3] 
}