2017-05-07 94 views
0

我的代碼不適用於所有的junit測試。輸入是一個數組,輸出是一個數組,其中每個第二個元素都是重複的。例如[1; 2; 3; 4; 5] - > [1; 2; 2; 3; 4; 4; 5] 謝謝。重複數組中的每個第二個元素

這裏是我的代碼:

public Listobject<T>[] duplicateEverySecondElement(Listobject<T>[] array){ 
if(array != null && array.length > 0){ 
    int n = array.length - 1; 
    if((array.length % 2) == 0){ 
     for(int i = (array.length + array.length/2) - 1; i > 0; i -= 3){ 
      array[i] = array[n]; 
      array[i - 1] = array[n]; 
      array[i - 2] = array[n - 1]; 
      n -= 2; 
     } 
     return array; 
    } 
    else 
    for(int i = (array.length + array.length/2) - 1; i > 0; i -= 3){ 
     array[i] = array[n]; 
     array[i - 1] = array[n - 1]; 
     array[i - 2] = array[n - 1]; 
     n -= 2; 
    } 
    return array; 
} 
else return array; 

}

+0

你可以舉一個測試的例子嗎? –

+0

四個測試之一是dynamicTest_duplicate_array_elements(array.insert.tests_duplicateEverySecondElement.duplicateEverySecondElement_Array_Test) – Naiki

+0

啊,我的意思是實際的數據,而不是代碼 - 什麼是輸入到函數,預期的輸出和實際的輸出。 –

回答

0

我發現邏輯有點難以遵循使錯誤很難發現。也許你想用boolean = true/false來標記你在第二個元素上,當這個布爾值爲true時,你可以重複輸出。

+0

這應該是一個評論... – Eugene

+0

起初,我試圖從名單向上。但是我也創建了太多的臨時性價值標籤來保存我被覆蓋的元素。所以我也試着從array [(array.length + array.lengeth/2) - 1]向後走,這應該是新數組中的最後一個地方。我爲陳述添加了兩個。第一個如果數組的最後一個元素應該加倍,如果不是第二個元素 – Naiki

+0

代碼的問題是邏輯,它非常混亂,我相信你可以更容易實現你想要的結果。只需使用一個循環,並輸入一個布爾值來跟蹤何時重複,而不是檢查奇數或偶數時使用%。啓動等於false的布爾值,並在循環結束時將其切換。當布爾值爲真時,只需將數據發送兩次到新數組。 – MacInnis

相關問題