为什么在while循环之外赋值变量会影响我方法的行为?

时间:2014-11-12 15:06:37

标签: ruby

我目前正在学习Ruby,并且经历了一些练习问题。我的任务是:

  

编写一个将输入作为字符串的方法。您的方法应该返回数组中最常见的字母以及它出现的次数。

这就是我提出的:

def most_common_letter(string)
  x = 0
  holder = string[x]
  topcount = 0
  topstring = 0
  while string.length > x
    counter = 0
    y = 0
    while string.length > y
      if holder == string[y]
        counter += 1
      end
        y += 1  
      if topcount == 0 || counter > topcount
        topcount = counter
        topstring = holder
       end
    end
    x += 1
  end
  return [topstring, topcount]
end

它返回它找到的第一个值,但返回正确数量的topcounts。对于我的生活,在逐步完成我的代码后我无法弄清楚为什么,但很明显我错过了一个明显的错误!!

在查看解决方案之后,我提出的解决方案与解决方案之间的唯一区别是:

def most_common_letter(string)
  x = 0
  topcount = 0
  topstring = 0
  while string.length > x
    holder = string[x]
    counter = 0
    y = 0
    while string.length > y
      if holder == string[y]
        counter += 1
      end
        y += 1  
      if topcount == 0 || counter > topcount
        topcount = counter
        topstring = holder
       end
    end
    x += 1
  end
  return [topstring, topcount]
end

为什么在while循环中移动赋值会影响x仍在循环外重新分配的行为?

答案必须在我面前,但我不知道为什么!!

1 个答案:

答案 0 :(得分:2)

如果删除一些行,也许很清楚:

def inside(string)
  x = 0
  while string.length > x
    holder = string[x]
    puts holder
    x += 1
  end
end

inside('abc')

此处,holder在循环中设置三次,使用当前值x,即012

输出:

a
b
c

另一个:

def outside(string)
  x = 0
  holder = string[x]
  while string.length > x
    puts holder
    x += 1
  end
end

outside('abc')

此处,holder使用x的初始值(即0)在循环外设置一次。

输出:

a
a
a