有很多方式可以实现这样的功能,但由于我们这里得到的,它可能是更有益的解决部分“也许有人能找到我的错误”。通过你的代码,有更多的错误比权利,所以它甚至不明确你的意图。
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