了解javascript和回文中的嵌套FOR循环
目前,我正在尝试使用嵌套for循环解决一个问题。我以前用反向法解决过。现在,我得到了一个以巢换圈的尝试 我不明白为什么我的代码不起作用。希望并感谢您的指导。提前谢谢了解javascript和回文中的嵌套FOR循环,javascript,arrays,for-loop,Javascript,Arrays,For Loop,目前,我正在尝试使用嵌套for循环解决一个问题。我以前用反向法解决过。现在,我得到了一个以巢换圈的尝试 我不明白为什么我的代码不起作用。希望并感谢您的指导。提前谢谢 函数回文(str){ var splitStr=str.split(“”); 对于(变量x=0;x=0;j--){ if(splitStr[x]==splitStr[j]){ 返回true; } } 返回false; } } 回文(“赛车”)想想这两个循环在执行时会做什么。例如,对于3个字母的单词,索引如下: x == 0, j
函数回文(str){
var splitStr=str.split(“”);
对于(变量x=0;x=0;j--){
if(splitStr[x]==splitStr[j]){
返回true;
}
}
返回false;
}
}
回文(“赛车”)代码>想想这两个循环在执行时会做什么。例如,对于3个字母的单词,索引如下:
x == 0, j == 2
x == 0, j == 1
x == 0, j == 0
x == 1, j == 2
x == 1, j == 1
x == 1, j == 0
x == 2, j == 2
x == 2, j == 1
x == 2, j == 0
看到问题了吗
此外,如果任何匹配为true,则将返回true。条件应该是相反的,如果任何匹配为false,它应该返回false(并且只有在所有匹配都成功时才返回true)。考虑两个循环在执行时将执行什么操作。例如,对于3个字母的单词,索引如下:
x == 0, j == 2
x == 0, j == 1
x == 0, j == 0
x == 1, j == 2
x == 1, j == 1
x == 1, j == 0
x == 2, j == 2
x == 2, j == 1
x == 2, j == 0
看到问题了吗
此外,如果任何匹配为true,则将返回true。条件应该是相反的,如果任何匹配为false,它应该返回false(并且只有当所有匹配都成功时才返回true)。您不能像这样使用两个for循环,因为在您的示例中racecar。如果第一次i=0
和j=splitStr.length-1
都是r,那么它会在第一次退出循环时返回true
。有时其他字母不是回文字母。这就是错误所在。您不能像这样使用嵌套for循环进行检查 您不能像这样使用两个for循环,因为在您的示例中赛车。如果第一次i=0
和j=splitStr.length-1
都是r,那么它会在第一次退出循环时返回true
。有时其他字母不是回文字母。这就是错误所在。您不能像这样使用嵌套for循环进行检查 代码不起作用的原因是您试图将数组中的字符与数组中的每个字符按相反顺序进行比较。对于字符串racecar
,第一个r
将按相反顺序与racecar
中的每个字符进行比较
此外,您将在第一次比较成功后立即返回
您不需要两个循环。这可以通过使用一个循环来实现
- for循环应以0索引开始,索引长度为字符串长度的一半
- 将该索引处的字符与字符串长度减1减该索引进行比较
- 如果任何字符不匹配,则中断循环李>
- 否则,继续比较
- 一旦你够到绳子长度的一半,你就有了回文
函数回文(str){
var splitStr=str.split(“”);
var isPalindrome=true;
对于(var x=0;x,代码不起作用的原因是您试图以相反的顺序将数组中的字符与数组中的每个字符进行比较。对于字符串racecar
,首先r
将以相反的顺序与racecar
中的每个字符进行比较
此外,您将在第一次比较成功后立即返回
您不需要两个循环。这可以通过使用一个循环来实现
- for循环应以0索引开始,索引长度为字符串长度的一半
- 将该索引处的字符与字符串长度减1减该索引进行比较
- 如果任何字符不匹配,则中断循环
- 否则,继续比较
- 一旦你够到绳子长度的一半,你就有了回文
函数回文(str){
var splitStr=str.split(“”);
var isPalindrome=true;
对于(var x=0;x),请逐步查看调试器中的代码并查看其功能。请逐步查看调试器中的代码并查看其功能。