这是用于评估两个字符串的长度和字符是否相等的正确代码。
function equal(x, y) {
if(x.length != y.length)
return false
var i = 0;
while(i < x.length) {
if(x.charAt(i) != y.charAt(i))
return false
i++
}
return true
}
equal("hello", "hello") // true
equal("hello", "heyyy") // false
我自己修改了它,我认为这对我来说是合乎逻辑的。但是我的代码(如下所示)在其角色内容不同时返回true。任何人都可以帮我解决我的版本有什么问题吗?
function equal(x, y) {
if(x.length != y.length)
return false
var i = 0;
while(i < x.length) {
if(x.charAt(i) != y.charAt(i))
return false
else return true
i++
}
}
equal("hello", "hi") //false
equal("hello", "heyyy") //true
答案 0 :(得分:5)
这是因为你在循环的第一次迭代中返回true:
if(x.charAt(i) != y.charAt(i))
return false
else return true
您需要在函数末尾返回true:
function equal(x, y){
if(x.length != y.length)
return false
var i = 0;
while(i < x.length){
if(x.charAt(i) != y.charAt(i))
return false
i++
}
return true
}
同样个人而言,我在for循环中这样做:)
你也可能遇到问题,因为事情已经超出界限。这是一个demo,显示当你的长度不一致时会发生什么。谢天谢地,你做了一个长度检查,所以这不应该是一个问题。
答案 1 :(得分:1)
如果字符相等,则在循环的第一次迭代中返回true
。这基本上保证了一个字符后的循环退出,这不是你想要的。删除else return true
子句并在while循环后添加return true
,你应该很高兴。
答案 2 :(得分:1)
问题是你使用return语句。第一个示例的计算结果为false,因为两个字符串的长度不同。第二个是误报,因为如果任何字符等于另一个字符,则返回true并退出循环,如果所有字符相等则不返回。
要修复它,只需移动return语句:
function equal(x, y){
if(x.length != y.length)
return false
var i = 0;
while(i < x.length){
if(x.charAt(i) != y.charAt(i))
return false
// else return true | move this to bottom to ensure correctness
i++
}
return true // here if nothing was found in the first two steps, they must be equal
}