比较运算符不起作用(Java 脚本)
Comparison operator not working(Java Script)
我正在尝试用字母表中的下一个字母替换字符串中的所有字母。
例如:a --> b 或 i --> j.
我的程序忽略了根据字母表数组检查字母的 if 语句。当我尝试 运行 代码时,它将所有字母替换为 "A",字母表数组中的最后一个元素。
虽然效率低下,但我找不到这个算法的任何错误。那么为什么程序会忽略 if 语句呢?
function LetterChanges(str){
var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","a"];
str = str.toLowerCase();
var ans = str.split("");
for(i = 0; i < ans.length; i ++)//Running through for each letter of the input string
{
for(a = 0; a < 26; a++)//Checking each letter against the alphabet array
{
if(alphabet[a] == ans[i])
{
ans[i] = alphabet[a+1];
}
}
}
return ans;
}
LetterChanges("Argument goes here");
当 if
执行时你输了 break
function LetterChanges(str){
var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","a"];
str = str.toLowerCase();
var ans = str.split("");
for(i = 0; i < ans.length; i ++)//Running through for each letter of the input string
{
for(a = 0; a < 26; a++)//Checking each letter against the alphabet array
{
if(alphabet[a] == ans[i])
{
ans[i] = alphabet[a+1];
break;
}
}
}
return ans;
}
console.log(LetterChanges("Argument goes here"));
之所以不起作用,是因为 ans
数组已修改,而您仍在检查它。
在此循环中:
for(a = 0; a < 26; a++)//Checking each letter against the alphabet array
{
if(alphabet[a] == ans[i])
{
ans[i] = alphabet[a+1];
}
}
如果发现 if
语句为真,ans[i]
将被更新,但在迭代的下一个循环中,它可能再次为真,因为您正在检查更新后的 ans[i]
变量。
正如@xianshenglu 所建议的,您可以通过添加一个 break
来解决这个问题,以便在找到正确的匹配项后从内部循环中退出。
for(a = 0; a < 26; a++) {
if(alphabet[a] == ans[i]) {
ans[i] = alphabet[a+1]
// escape from the inner loop once a match has been found
break
}
}
如需另一种方法,您可以执行以下操作:
var result = str.toLowerCase().split('').map(ch => {
var pos = alphabet.indexOf(ch)
return pos >= 0 ? alphabet[pos + 1] : ch
}).join('')
如果你想摆脱alphabet
数组,你可以使用字符代码。例如:
var result = str.toLowerCase().split('').map(ch => {
var code = ch.charCodeAt(0)
if(code < 96 || code > 122){ return ch }
return String.fromCharCode((code - 96) % 26 + 97)
}).join('')
我正在尝试用字母表中的下一个字母替换字符串中的所有字母。
例如:a --> b 或 i --> j.
我的程序忽略了根据字母表数组检查字母的 if 语句。当我尝试 运行 代码时,它将所有字母替换为 "A",字母表数组中的最后一个元素。
虽然效率低下,但我找不到这个算法的任何错误。那么为什么程序会忽略 if 语句呢?
function LetterChanges(str){
var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","a"];
str = str.toLowerCase();
var ans = str.split("");
for(i = 0; i < ans.length; i ++)//Running through for each letter of the input string
{
for(a = 0; a < 26; a++)//Checking each letter against the alphabet array
{
if(alphabet[a] == ans[i])
{
ans[i] = alphabet[a+1];
}
}
}
return ans;
}
LetterChanges("Argument goes here");
当 if
执行时你输了 break
function LetterChanges(str){
var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","a"];
str = str.toLowerCase();
var ans = str.split("");
for(i = 0; i < ans.length; i ++)//Running through for each letter of the input string
{
for(a = 0; a < 26; a++)//Checking each letter against the alphabet array
{
if(alphabet[a] == ans[i])
{
ans[i] = alphabet[a+1];
break;
}
}
}
return ans;
}
console.log(LetterChanges("Argument goes here"));
之所以不起作用,是因为 ans
数组已修改,而您仍在检查它。
在此循环中:
for(a = 0; a < 26; a++)//Checking each letter against the alphabet array
{
if(alphabet[a] == ans[i])
{
ans[i] = alphabet[a+1];
}
}
如果发现 if
语句为真,ans[i]
将被更新,但在迭代的下一个循环中,它可能再次为真,因为您正在检查更新后的 ans[i]
变量。
正如@xianshenglu 所建议的,您可以通过添加一个 break
来解决这个问题,以便在找到正确的匹配项后从内部循环中退出。
for(a = 0; a < 26; a++) {
if(alphabet[a] == ans[i]) {
ans[i] = alphabet[a+1]
// escape from the inner loop once a match has been found
break
}
}
如需另一种方法,您可以执行以下操作:
var result = str.toLowerCase().split('').map(ch => {
var pos = alphabet.indexOf(ch)
return pos >= 0 ? alphabet[pos + 1] : ch
}).join('')
如果你想摆脱alphabet
数组,你可以使用字符代码。例如:
var result = str.toLowerCase().split('').map(ch => {
var code = ch.charCodeAt(0)
if(code < 96 || code > 122){ return ch }
return String.fromCharCode((code - 96) % 26 + 97)
}).join('')