2017-03-04 146 views
-1

的特性「長度」這是我得到了我的代碼中的錯誤:無法讀取零錯誤

TypeError: Cannot read property 'length' of null 
    at countPositivesSumNegatives 
     at /runner/frameworks/javascript/cw-2.js:179:21 
    at Promise._execute 
    at Promise._resolveFromExecutor 
    at new Promise 
    at describe 
      at Object.handleError 
     at ContextifyScript.Script.runInThisContext 
    at Object.exports.runInThisContext 

的目標是創建一個函數,它在數字的隨機陣列(輸入),並返回正數的數量和負數的總和。一切正常,除了錯誤消息,我在上面得到,這是一個錯誤的價值觀測試,這意味着什麼

function countPositivesSumNegatives(input) 
{ 
    let negSum = 0; 
    let count = 0; 
    let arr = []; 

    for(i = 0; i < input.length; i++) { 
    if(input[i] > 0) 
    { 
     count++; 
    } 
    if (input[i] < 0) 
    { 
     negSum += input[i]; 
    } 
    if (!input[i]) { 
     negSum = negSum; 
     count = count; 
    } 
    } 

    arr.push(count,negSum); 
    return arr; 
    } 
} 
+0

通過'countPositivesSumNegatives(空)重現'。 – melpomene

回答

2

這聽起來像你正在對你的代碼運行一些自動化測試,他們怎麼檢查你處理不好的輸入。你的代碼沒有被設置爲處理除期望的數字數組以外的任何其他數據,所以它沒有通過這些測試。

可以解決,在很多方面,但事情就這麼簡單

if (input === null) { 
    return 'Input invalid'; // or something like that 
} 
// put your for loop here 

會做的伎倆。很可能,您可能會遇到更多的測試用例,需要處理意想不到的輸入。我希望這有幫助。

+0

你說得對,我們應該返回空括號,如果它爲空。我加了這個,但是我仍然沒有通過1/2錯誤測試。任何想法可能是什麼? –

+0

它會告訴你哪些測試正在通過,哪些失敗?你仍然無法通過'空'輸入測試,還是失敗了一個不同的測試? – coralvanda

+1

我想通了。我只需要添加一個額外的「|| input.length == 0;」非常感謝你的幫助! –

1

由於melpomene暗示,該類型的錯誤正在拋出,因爲您正嘗試在null對象上調用.length

由於出現了「錯誤值測試」,這聽起來像是一個測試套件針對您的解決方案運行,其中一個測試正在檢查您是否正在處理錯誤input,而您不是,從而出錯。

我會建議在跳轉到處理之前做一些驗證input。簡單地將if塊放在頂部,確保input不是null,實際上是一個數字數組。

我假設你有指示如果無效input的情況下該怎麼辦?也許只是回來?

0

你應該能夠處理null數組..

這裏是如何解決(覈對空):

function countPositivesSumNegatives(input) { 
    let negSum = 0; 
    let count = 0; 
    let arr = []; 
    if (input != null) { 

     for (i = 0; i < input.length; i++) { 
      if (input[i] > 0) { 
       count++; 
      } 
      if (input[i] < 0) { 
       negSum += input[i]; 
      } 
      if (!input[i]) { 
       negSum = negSum; 
       count = count; 
      } 
     } 
    } 
    arr.push(count, negSum); 
    return arr; 
}