有很多方式可以實現這樣的功能,但由於我們這裏得到的,它可能是更有益的解決部分「也許有人能找到我的錯誤」。通過你的代碼,有更多的錯誤比權利,所以它甚至不明確你的意圖。
var stringlength = str.length-1;
這很奇怪,我們不知道你在這裏嘗試達到什麼目的。 stringlength
從未在函數中使用:
for (var i=0; i<strAlpha.length; i++) {
您正在遍歷字母表。我有一種感覺,你想迭代你的輸入參數str
?
if (strAlpha < strAlpha[i].length){
這很奇怪。目前還不清楚你想在這裏測試什麼。您目前正在檢查字母表(字符串,始終是相同的值)是否小於(即按字母順序排列)字母位置i
處的字符length
。由於i
在字母表範圍內,因此strAlpha[i]
將始終只返回一個字符。 strAlpha[i].length
只能是1或拋出異常。現在,由於您將字符串與數字值1
進行比較,字符串比較將是一個小於條件的數字。你的情況幾乎總是說if('abc...' < 1)
這永遠不會是真的。
LetterChanges += strAlpha[i] +1;
如果你的代碼做進入狀態,它會遇到這種情況。將strAlpha[i]+1
添加到LetterChanges
。 strAlpha[i]
再次是i
位置的字母表。對於i = 0
,strAlpha[i] = 'a'
和'a' + 1 = 'a1'
。你遍歷整個字母表;如果你的情況評估爲真,你最終會得到LetterChanges = 'a1b1c1...'
。在這裏,我假設你的意思是strAlpha[i+1]
,它會在位置i+1
處產生字母表的字母。您仍然遍歷整個字母表,最終會將所有字符向上移動一個位置,即LetterChanges = 'bce...'
。
return str;
最後,返回字符串。這裏有兩個問題。主要的一點是你可以在沒有碰過它的情況下返回輸入參數str
。你會一直返回你傳遞給函數的任何東西。你的意思是return LetterChanges;
?第二個問題是,你回到它內的for
循環,這意味着它會在第一次迭代,i=0
退出功能,返回無論是在過去。
如果在此變更爲return LetterChanges;
狀態,它會返回一個空字符串。如果您更改了條件以使其評估爲true並更改爲return LetterChanges;
,它將返回'b'
。如果你做了這兩個更改並將循環語句移出循環外部,它將返回'bcedefghijklmnopqrstuvwxyz'
,無論你傳遞了什麼內容。
這裏有很多問題,我們無法告訴你應該修復哪些內容以使代碼正常工作。你需要退後一步,看看你想要做什麼。
爲什麼要退* *那? –
你的函數沒有看'str'的內容。 – Barmar
你的邊界條件是什麼(即* z *)?大寫字母,數字和其他字符怎麼樣? – Phil