2016-09-26 121 views
0
var howM = prompt("How many cards?") 

var arr = []; 
for(var i = 0; i < howM; i++) 
arr.push(prompt("Enter a card:")); 

console.log(arr) 


for(var i = 0; i <= howM; i++) 
var sum = 0; 
var eXt = arr[i] 
eXt = eXt.replace (/-/g, ""); 
for (i = 0; i < eXt.length; i++) { 
sum += parseInt(eXt.substr(i, 1)); } 
console.log(sum); 

它告訴我這個「TypeError:無法在eval:13:11處讀取未定義的 的屬性'替換',這對我來說沒有意義,因爲它在它的右上方。有人可以告訴我爲什麼這段代碼不會運行嗎?

+0

'howM'需要是一個數字,與循環中的'i'進行比較。 – DaveCoast

+0

它是一個數字,當它提示我輸入4時,它在第一個for循環中工作,我不明白爲什麼這會導致替換部分通過函數的一半出現問題。 –

+0

我對javascript的規則並不瞭解。我知道在某些情況下可以省略分號......我們確定'var eXt'這行是其中一種情況嗎? (我會在該行的末尾添加一個分號。)但更好奇的是函數名稱'replace'和開頭的paren之間的空格。該錯誤使得它看起來像JavaScript看到'replace'作爲一個屬性,而不是一個函數。我懷疑問題是在開幕之前的空白。我建議你在刪除空格後嘗試它,例如'eXt.replace(...)'; – spencer7593

回答

1

循環for(var i = 0; i <= howM; i++)的整體不包含在大括號{..}中。因此,只有語句var sum = 0;將在循環中執行。另外,你可能打算說i < howM。所以,你要像這樣的循環:

for(var i = 0; i < howM; i++) { 
    var sum = 0; 
    var eXt = arr[i] 
    eXt = eXt.replace (/-/g, ""); 
    for (i = 0; i < eXt.length; i++) { 
     sum += parseInt(eXt.substr(i, 1)); 
    } 
} 
console.log(sum); 
+0

謝謝你,這是第一次得到這個網站的正確答案。如果你不介意我加入,循環運行一次後,它給我不確定。你知道爲什麼它不會運行數組的其他部分? –

+0

你可以給我你輸入的第一張2張牌嗎? – redneb

+0

我在上面編輯了我的答案,它可能有您正在尋找的解決方案,並解釋了大多數行。 – Howzieky

0

檢查意見:

var howM = prompt("How many cards?") 

var arr = []; 
for(var i = 0; i < parseInt(howM); i++) 
arr.push(prompt("Enter a card:")); //No curly braces is fine when its a single line. When there's no braces, JS just runs the next line x amount of times 

console.log(arr) 

var sum = 0; //Create sum out here. Setting it to zero every loop defeats the purpose 
for(var i = 0; i < arr.length; i++)//You said "i <= howM". Better to use the length of the array that is being looped through 
{ //Use curly braces to show what code to execute repeatedly 
    var eXt = arr[i]; //Set eXt to the current number 
    eXt = eXt.replace("-", ""); //No need for regex 
    sum += parseInt(eXt); //Convert the input to a number, then add it to sum 
} 
console.log(sum); 
+0

虐待嘗試使用這個,看看它是否適用於即時通訊使用它 –

+0

仍然說undefined –

+0

仍然說undefined –

0

第二for循環沒有它周圍的支架。您可以必須使用括號除非它是一個單線循環。例如:

這是罰款:

for (var i=0;i<100;i++) 
    console.log(i); 

這是不是:

for (var i=0;i<100;i++) 
    var x = i; 
    x++; 
    console.log(x); 

所以第二個for循環應該是這樣的:

for(var i = 0; i <= howM; i++) { 
    var sum = 0; 
    var eXt = arr[i] 
    eXt = eXt.replace (/-/g, ""); 
    for (i = 0; i < eXt.length; i++) { 
     sum += parseInt(eXt.substr(i, 1)); 
    } 
    console.log(sum); 
} 

此外在第for循環我會使用arr[i] = value來代替。

+0

這不會運行在所有「SyntaxError:意外的輸入結束」 –

+0

我錯過了在外部for循環結束的括號,但真的你只需要得到一本書,並閱讀它。 – Programmer2120

相關問題