оператор if не работает в цикле for - PullRequest
0 голосов
/ 22 мая 2018

Мне нужно выяснить, содержит ли массив целых чисел один или несколько элементов, которые делят массив на две части, так что сумма элементов в левой и правой частях равна.

Я пробовал это:

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 голосов
/ 22 мая 2018

В ruby ​​не рекомендуется использовать for, вы можете использовать each для циклов в Ruby.

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 
0 голосов
/ 22 мая 2018

Sidenote: for циклы являются контр-идиоматическими в ruby ​​(читай: никто не использует for циклы в ruby.)

Проблема с вашим кодом заключается в последнем сравнении,Вы уже рассчитали суммы, поэтому вам не следует их изменять:

# 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...