2016-08-03 57 views
1

我有一個基於另一個數組大小聲明的數組,並且最初所有值都設置爲0,儘管動態分配的大小是固定的(等於其他數組大小),如需要在Java中。接下來我有一個for循環與某些if-else條件。如果一個條件是true然後加1到數組第一索引類似如果下一次迭代是true然後加1到第二個索引並繼續。 我希望以後的數組是二進制的,所以如果我得到1這意味着所有的條件是true,如果它是0零,這意味着某些地方的條件是false。 我並不贊成使用ArrayList的,也是我不知道如果我能約束的ArrayList長度,因爲當我這樣做,並打印它顯示了大小爲0爲固定長度的Java數組添加值

How can I dynamically add items to a Java array?

美國是什麼我的需求,但沒有使用ArraylistList等,因爲我發現相關的答案大部分都建議使用ArrayList。

感謝

+2

如果數組元素永遠只能將是'0'或'1',爲什麼不讓它'布爾[]',而不是?同樣的事情,更明確的意圖。 – JonK

+0

是多數民衆贊成在一個很好的建議,但我怎麼可以像序列列表添加1序列 –

+0

你想修改現有的元素或添加一個新的?我想你可能會在這裏感到困惑。 ArrayLists對於*動態大小的集合非常有用,常量數組對於固定長度集合中的動態值是很好的。 – JonK

回答

3

爲什麼不去做這樣的事情:

for (int i = 0; i < arr.length; i++) 
{ 
    if (...) 
     arr[i] = 1; 
    else ... 
    if (...) 
     arr[i] = 1; 
} 

在嵌套循環的情況下,更復雜的邏輯,你可以做這樣的事情:

int index = 0; 
boolean flag = true; 
while (still have what to do) 
{ 
    for <complicated logic> 
    if (flag) 
    { 
     arr[index] = 1; 
     index++; 
    } 
    flag = true; 
} 

只是確保每個條件積累成這樣的標誌 - flag = flag && condition

通知你可以縮短條件 - 如果你得到一個錯誤,你可以跳過檢查其餘的條件。

+0

實際上有四個嵌套循環,跟蹤相對於for循環的索引是不可能的,我的數組也可以是長度爲3,內部循環可以多於3(可能在我的場景中)。因此,我需要根據所提供的方案提供一些解決方案。 –

2
for (i =0 ; i != len ; i++) arr[i] = condition 
+0

不適用於int數組 - java不是c ...你可以改成'condition? 1:0' – elyashiv

+0

@elyashiv它也行不通,因爲我有'i = 0'而不是'int i ='。 –

+0

是的,但更少的人會在使用它之前不聲明var的錯誤。 – elyashiv

1

我同意ArrayList是一種簡單而且直接的方法。

這樣,你仍然可以用簡單的數組[]來做到這一點,你只需要記住array []的大小是固定的,如果你想增加它的大小,你需要定義一個新的數組[]更大的尺寸(通常您會將原始尺寸加倍)並將原始數組中的所有項目複製到新數組中。將索引保留到所用數組中的最後一個點也是一種好的做法。

+0

不是數組大小是固定的,並且不需要改變以跟蹤二進制AND函數。我需要的是一個固定長度的數組,但是我如何按順序添加數值,如add()是我需要的時間。 –

+0

然後我不明白這個問題,無論如何,我看到你有一個答案。 –

2

使用BitSet,爲最終和功能:

BitSet bits = new BitSet(array.length); 
for (int i = 0; i < array.length; ++i) { 
    bits.set(i, ... true or false); 
} 

boolean allTrue = bits.cardinality() == array.length(); 
boolean allFalse = bits.cardinality() == 0; // Or bits.isEmpty() 
+0

是更好還是應該循環訪問數組,並使用AND來簡化操作。可能並不高效。 @JonK:鷹眼 –

+0

BitSet有找到下一個或上一個設置位1的方法。但是'cardinality()'產生的位數設置爲1,所以使用'allTrue'。對於所有錯誤''Set'的isEmpty()'也適用。 –

+0

我不會擔心使用'BitSet'與手動執行的性能 - 除非您正在以百萬計的列表編號工作,它至多是一個微型優化。使用最清楚的東西給你。如果'bits.cardinality()== array.length'對你來說是清楚的*那麼就使用它,否則不要。 – JonK