我目前正在学习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仍在循环外重新分配的行为?
答案必须在我面前,但我不知道为什么!!
答案 0 :(得分:2)
如果删除一些行,也许很清楚:
def inside(string)
x = 0
while string.length > x
holder = string[x]
puts holder
x += 1
end
end
inside('abc')
此处,holder
在循环中设置三次,使用当前值x
,即0
,1
和2
。
输出:
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