这是无限循环吗? -Coderbyte运动

时间:2015-09-03 20:27:28

标签: loops infinite

当我跑步时,似乎陷入无限循环,但对于我的生活,我无法看出错误。

我正在做的问题是:http://coderbyte.com/CodingArea/GuestEditor.php?ct=Swap%20Case&lan=JavaScript

"使用JavaScript语言,使用函数SwapCase(str)获取str参数并交换每个字符的大小写。例如:如果str是" Hello World"输出应该是hELLO WORLD。让数字和符号保持原样。"

function SwapCase(str) { 
  // code goes here  
  // loop through, check case with functions isUpper or isLower
  // if isUpper --> .toLowerCase; if isLower --> .toUpperCase
  for (var i = 0; i < str.length; i++) {
    if (isUpper(str[i])) 
      str = str.slice(0, i) + str[i].toLowerCase() + str.slice(i);
    else if (isLower(str[i]))
      str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i);
  }

  return str;        
}

function isLower(char) {
  var alphabet = 'abcdefghijklmnopqrstuvwxyz';
  for (var j = 0; j < alphabet.length; j++) {
    if (char === alphabet[j]) return true;
  }
}
function isUpper(char) {
  var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  for (var k = 0; k < alphabet.length; k++) {
    if (char === alphabet[k]) return true;
  }
}

1 个答案:

答案 0 :(得分:0)

这行代码:

str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i);

“你好”.slice(i)当i = 0时给你“你好”。 因此在每次迭代后str变为h + hello;他+你好。你的字符串不断增加。

一个解决方法是预先存储str.length。

var strLen = str.length;
for (var i = 0; i < strLen; i++) {

这将强制循环运行字符串的原始长度。

或者您可以通过以下方式修复:

str = str.slice(0, i) + str[i].toLowerCase() + str.slice(i + 1);
else if (isLower(str[i]))
str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i + 1);

注意str.slice(i + 1);