为什么需要减去数组的大小?

时间:2014-10-07 06:25:07

标签: ruby loops for-loop

当我尝试在不减去数组大小的情况下运行第二行时,它将无法工作。为什么不?

values = [10, 9, 11, 2, 45]
max_element = values.size - 1
first = values[0]
for i in 0..max_element
  while first < values[i]
    first = values[i]
  end
end
p "The largest value is #{first}"

EnumerableArray上的方法(例如each)之外,for是唯一循环遍历元素集合的迭代器吗?

3 个答案:

答案 0 :(得分:3)

因为数组索引从零开始,就像在C或Java中一样:

values = [10, 9, 11, 2, 45]
values.size #=> 5

values[0] #=> 10 (1st element)
values[4] #=> 45 (last element)
values[5] #=> nil (this is beyond the last item)

您可以使用...(三个点)来排除范围的结尾:

for i in 0...values.size
  # ...
end

此外,您的while应该是if

if first < values[i]
  first = values[i]
end

# or

first = values[i] if first < values[i]

答案 1 :(得分:2)

数组在索引0处开始元素计数。 values.size为您提供数组中的元素数(对于非空数组,以1开头)。请查看以下示例:

values  = [10  , 9   ]
index   =  0     1
size    =  2

values  = [10  , 9   , 11  , 2   , 45   ]
index   =  0     1     2     3     4
size    =  5

这就是为什么最后一个元素始终位于index的{​​{1}}

答案 2 :(得分:1)

因为它需要max_element = 5(值的大小),当我得到5时,你访问while循环中的值[5],这超出了数组值范围