【问题标题】:Comparison operator not working(Java Script)比较运算符不起作用(Javascript)
【发布时间】:2018-04-06 03:49:29
【问题描述】:

我正在尝试用字母表中的下一个字母替换字符串中的所有字母。

例如: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");

【问题讨论】:

  • 请声明局部变量,例如a 和i,否则最终你会遇到非常有趣的错误。
  • @Thomas 只是为了澄清,你是说我应该在我的 for 循环之前有 var a = 0 和 var i = 0 吗?
  • 一个简单的var a,i; 在函数内部的某个地方(任何地方)就足够了,但是由于您只需要在循环中使用这个变量,我会得到for(var i=0; ...

标签: javascript algorithm comparison-operators


【解决方案1】:

它不起作用的原因是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('')

【讨论】:

    【解决方案2】:

    当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"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多