Ruby代码仅打印数组前两个元素 无法输出全部字符串是什么原因
问题原因
核心问题出在index变量的更新逻辑错误,你把数值转成了字符串做拼接操作,而非数值加法:
- 初始
index值为0,0 < 4成立,打印words[0]即Hello,执行index = index.to_s + 1.to_s时,相当于拼接字符串"0"和"1",得到index = "01" - 第二次判断循环条件时,
"01".to_i为1,1 < 4成立,打印words[1]即Goodbye,再次更新时拼接字符串"01"和"1",得到index = "011" - 第三次判断循环条件时,
"011".to_i为11,11 < 4不成立,循环直接终止,因此不会输出后两个元素
修复方案
把index的更新逻辑改为数值加法即可,无需来回转换字符串类型,修复后的代码如下:
words = ["Hello", "Goodbye", "Yes", "No"] index = 0 while index < words.length p words[index] index += 1 end
如果使用Ruby自带的迭代器写法,可以完全避免索引操作错误,更简洁安全:
words = ["Hello", "Goodbye", "Yes", "No"] words.each { |word| p word }
内容的提问来源于stack exchange,提问作者Philip Jobe
相关产品推荐
相关产品推荐

