2012-10-07 21 views
0

任何人都可以告訴我如何更正以下代碼以正確工作嗎?方法過濾數組中的偶數值並將它們返回到新數組中

編寫一個方法filterEvens,它接受一個整數數組並返回一個只包含偶數值的新數組。

只包含偶數值的新數組。例如:

int[] data = {1, 3, 4, 2, 0, 5, -2}; 
int[] evens = filterEvens(data); 

public static int[] filterEvent(int[] data) { 
    int countLength = 0; 

    for (int i = 0; i < data.length; i++) { 
     if (data[i] % 2 == 0) { 
      countLength++; 
     } 
    } 

    int[] filArray = new int[countLength]; 
    for (int i = 0; i < data.length; i++) { 
     if (data[i] % 2 == 0) { 
      filArray[i] = data[i]; 
     } 
    } 

    return filArray; 
} 
+0

第1步:一致地格式化您的代碼並正確使用空格。 「filArray」和「data」的計數器是否相同?它們長度不一樣,並且包含不同指標的不同項目。 –

回答

1

的問題是:

for (int i =0; i< data.length;i++) 
    { 
    if(data[i]%2==0) 
    { 
     filArray[i]= data[i] ; 
    } 
} 

你從值0循環 - > data.length。這是一個問題,因爲數組filArray [i]的長度較小。

想象一下,你正在尋找某人的房子。在他們給你的街道上,讓我們說翡翠博士的房子號碼可以從2000 - 3000.然後你被告知,他們住在4000翡翠博士在這裏同樣的情況下,除了電腦試圖找到房子。

1

您填寫錯誤的索引。

你有

if(data[i]%2==0) 
{ 
    filArray[i]= data[i] ; 
} 

這對於數據的單元格,但filArray的細胞正確的是錯的變化來

int j = 0; 
for (int i =0; i< data.length;i++) 
    { 
    if(data[i]%2==0) 
    { 
     filArray[j]= data[i] ; 
     j++; 
    } 
    } 

其餘的看起來不錯。雖然你應該ArrayList看一看,因爲這將可以在這裏使這更有效的

+0

或者只是做'filArray [j ++] = data [i]'。 –

+0

是真實的,但是因爲他說他是java的新手,所以我想讓它更簡單一些。 – twain249

相關問題