2013-12-09 17 views
0

這是我有:如何修改此代碼以使數組中的每個偶數索引都爲真?

boolean[] even = new boolean[array.length]; 
    for (int i = 0; i < array.length; i++) { 
     even[i] = (array[i] % 2) == 0; 
    } 

我想索引(0,2,4,6,8,etc)是真實的,和索引(1,3,5,7,9,etc)是假的

我覺得這個代碼是更準確的是什麼,我試圖做的,但它不會編譯。

for(int i = 0; i < array.length ; i++) { 
     int val = (array[i] % 2); 
     if(val == 0) 
      array[i] = true; 
     else 
      array[i] = false; 
    } 
+0

你應該改正i%2中的數組[i]%2,我想。 – umanganiello

+0

你想要'i%2'而不是'array [i]%2',當然? –

回答

0

您需要使用even[i] = true而不是array[i] = true。我假設數組是一個整數數組,甚至是一個布爾值數組。因此,您需要將布爾值賦予布爾數組的索引。

1

在第一代碼段,變化:

even[i] = (array[i] % 2) == 0; 

到:

even[i] = (i % 2) == 0; 

在第二代碼段,變化:

int val = (array[i] % 2); 

到:

int val = i % 2; 
+0

順便說一句'&1'比'%2'快得多 –

0

你的錯誤是非常小:

你是不是檢查你的索引是否是被二整除,而是,如果數組中值是整除2

boolean[] even = new boolean[array.length]; 
for(int i = 0; i < even.length ; i++) 
{ 
if(i % 2 == 0) 
    even[i] = true; 
else 
    even[i] = false; 
} 

編輯:顯然,每個人都需要大概有相同的時間來回答,現在我們有七十個相同的答案。

0

在第一個示例中,您正在寫入數組even,該數組是布爾值數組。

在第二個示例中,您正在寫入數組array,該數組(但未顯示)必須是整數數組,因爲這是您從中讀取整數的位置。

嘗試:

for(int i = 0; i < array.length ; i++) 
{ 
    int val = (array[i] % 2); 
    if(val == 0) 
     even[i] = true; 
    else 
     even[i] = false; 
} 
0

進行模數和分支,它是你可以使用一些循環展開優化環路既昂貴的操作相反的。

boolean[] even = new boolean[array.length]; 
for (int i = 0; i < array.length; i += 2) { 
    even[i] = true; 
    // not needed as boolean[] are set to all false by default 
    // even[i+1] = false; 
} 

BTW一個布爾[]使用在大多數平臺每一個值字節。更有效的方法可能是使用BitSet。

BitSet even = new BitSet(array.length); 
for (int i = 0; i < array.length - 1; i += 2) 
    even.set(i); 

這將只使用內存的1/8。

0

試試這個;

for(int i = 0 ; i<array.length ; i++){ 
    if(i % 2 == 0){ 
     array[i] = true; 
    } 
    else{ 
     array[i] = false; 
    } 
} 
0

您可以修改代碼爲以下:

for(int i = 0; i < array.length ; i++) { 

    if(array[i]%2==0) 
     even[i] = true; //assign to even , not array 
    else 
     even[i] = false; //assign to even, not array 
    } 

得到你想要的東西。

相關問題