'if'语句在'for'循环中不起作用

时间:2018-05-22 06:31:36

标签: ruby if-statement

我需要找出一个整数数组是否包含一个或多个元素,这些元素将数组分成两部分,使得左边和右边部分的元素总和相等。

我试过了:

arr = [1,2,3,4,3,2,1]

left_sum = 0
right_sum = arr.inject(0) { |sum, x| sum = sum + x } 

for i in 0..arr.length-1
  counter = []
  right_sum = right_sum - arr[i]

  case i
    when 0
    left_sum = 0          
  else
    left_sum = left_sum + arr[i-1]
  end

  puts "Left sum of element #" + i.to_s + "=" + left_sum.to_s
  puts "Right sum of element #" + i.to_s + "=" + right_sum.to_s
  puts " "

  if right_sum - arr[i] == left_sum + arr[i-1]
    puts "Left sum" + "=" + "Right sum"
    counter.push(i)
  end

  puts counter.to_s

end

我遇到了一个错误。我不明白为什么if - 语句在for - 循环中不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

旁注: for循环在ruby中是反惯用的(读:没有人在ruby中使用for循环。)

您的代码问题出在上一次比较中。你已经计算了总和,因此你不应该改变它们:

# if right_sum - arr[i] == left_sum + arr[i-1]
if right_sum == left_sum
  puts "Left sum" + "=" + "Right sum"
  counter.push(i)
end

此外,我强烈建议您使用Array#[]Array#sum重写此解决方案。

答案 1 :(得分:1)

在ruby中使用for不是一个好主意,你可以在Ruby中使用each for循环。

arr.each { |i|
   ...
}

此外,您还需要在询问是否等于之前计算总和。

right_aux = right_sum - arr[i]
left_aux = left_sum + arr[i-1]
if right_aux == left_aux
  puts "Left sum" + "=" + "Right sum"
  counter.push(i)
end