【问题标题】:basic while loop concept基本的while循环概念
【发布时间】:2014-09-22 19:20:35
【问题描述】:

这是评估两个字符串的长度和字符是否相等的正确代码。

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

【问题讨论】:

  • 当第一个字符相等时返回 true
  • 到处都缺少分号
  • 另外,beware the "heyyy" string(轻微的 NSFW 语言)
  • 谁赞成这个?甚至还有工作代码作为比较,那么尝试调试代码并实际主动做某事有什么问题?
  • 我不像你们大多数人一样是专业人士,在调试我的错误之前我需要了解基础知识。

标签: javascript loops while-loop


【解决方案1】:

这是因为您在循环的第一次迭代中返回 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。这是我想写的,但你打败了我。
【解决方案2】:

问题在于您使用了 return 语句。第一个示例的计算结果为 false,因为这两个字符串的长度不同。第二个是误报,因为如果 any 字符与另一个字符相等而不是 所有 字符相等,则返回 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
}

【讨论】:

    【解决方案3】:

    如果字符相等,则在循环的第一次迭代中返回 true。这基本上保证了一个字符后循环退出,这不是你想要的。删除else return true 子句并在while 循环后添加return true,您应该可以开始了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 2023-01-17
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      相关资源
      最近更新 更多