我正在嘗試對我在 Ruby 中創建的陣列求和。我以整數 (10) 為例,但代碼必須能夠允許將任何型別的整數插入其中。我必須插入一個數字,并讓 Ruby 找到從 0 到插入的數字之間的任何 #,這些數字可以被 3 和 5 整除。數字不應該在陣列中重復。然后我需要將這些數字相加。我已經創建了回圈來查找這些數字,但我的問題是我無法弄清楚之后如何對陣列中的這些數字求和。我用谷歌搜索了很多不同的選項,但沒有一個有效。我對此很陌生,但我正拼命想弄清楚。任何幫助將不勝感激,謝謝。
到目前為止,這是我的代碼,并且我知道求和回圈不起作用,但我正在展示我是如何嘗試的:
嘗試#1:
def sum_multiples(num)
mult = []
i = 1
while i < num
if i % 3 == 0 || i % 5 == 0
mult << i
end
i = 1
end
return mult
end
def summing(array)
array = mult
sum = 0
array.each do |x|
end
sum = x
end
puts sum_multiples(10)
嘗試#2:
def sum_multiples(num)
mult = []
i = 1
while i < num
if i % 3 == 0 || i % 5 == 0
mult << i
end
i = 1
end
return mult
end
def summing(array)
array = mult
array.each { |a| sum = a }
return array
end
puts sum_multiples(10)
uj5u.com熱心網友回復:
如果我很好地理解您正在嘗試做什么,您可以使用下一個功能輕松完成:
# sum all numbers from 0 to `num` that are divisible by 3 & 5
# then sum and return the result
# @param num [Integer] An unsigned integer greater than 0.
# @return [Integer]
def sum_multiples(num)
((0..num).select { |e| (e % 3).zero? && (e % 5).zero? }).sum
end
# we know that all numbers divisible by 3 and 5 are multiples of 15
# so this must print 45
p sum_multiples(30)
稍微解釋一下,首先我們創建一個從 0 到給定數字的范圍,然后過濾我們需要的數字,然后對結果陣列求和。
uj5u.com熱心網友回復:
在您的第一次嘗試中,您已經定義了一個summing方法,但您沒有使用它——這是一件好事,因為它根本不起作用。好訊息是陣列確實有一個sum方法,所以如果你將行return mult改為return mult.sum你會看到一些進展。
uj5u.com熱心網友回復:
您的sum_multiples方法似乎是回傳的數字是 3 和/或 5 的倍數。但是它不會對這些數字求和,因此我將洗掉該前綴:
def multiples(num)
# ...
end
您還說“從 0 到插入的數字”,所以您應該從0:
def multiples(num)
mult = []
i = 0 # <----- 0, not 1
while i < num
if i % 3 == 0 || i % 5 == 0
mult << i
end
i = 1
end
return mult
end
試一試吧:
multiples(10)
#=> [0, 3, 5, 6, 9]
看起來不錯。一個小建議:方法呼叫multiples(10) 看起來好像會回傳 10 的倍數(它沒有)。它從來沒有提到3或者5如果我不知道它的實作,我會很驚訝得到這個結果。也許一個更具描述性的方法名稱和一個具有適當名稱的關鍵字引數multiples_of_3_and_5(upto: 10)可能會有所幫助,例如. 然而,就目前而言,它已經足夠好了。
現在是第 2 部分:
然后我需要將這些數字相加。
對于您的summing方法,您定義一個引數array:
def summing(array)
#
end
當您呼叫該方法時,您必須傳遞該引數,例如:
summing([1, 2, 3])
# ^^^^^^^^^
# passed-in argument
這將自動將array變數設定為傳遞的值(陣列[1, 2, 3])。您不必自己設定:
def summing(array)
array = mult # <-- not needed, and in fact "mult" is never defined
# ...
end
在您的回圈中,您sum通過 =. 為了使它作業,sum需要一個初始值:
def summing(array)
sum = 0
array.each { |a| sum = a }
# ...
end
最后一個問題是summing' 的回傳值。該方法應該計算 中元素的總和array。我希望它也能回傳計算的總和:
def summing(array)
sum = 0
array.each { |a| sum = a }
return sum # <-- not array
end
讓我們嘗試一下:
summing([1, 2, 3])
#=> 6
summing([10, 20])
#=> 30
要將這兩種方法結合在一起,我會使用變數來存盤回傳值:
numbers = multiples(10)
#=> [0, 3, 5, 6, 9]
sum = summing(numbers)
#=> 23
如果你不需要這些數字,你也可以寫:
sum = summing(multiples(10))
#=> 23
即只需替換numbers為您之前分配給它的運算式。
請注意,您的代碼不是很地道。您很少while在 Ruby 中使用回圈或顯式計數器或顯式return陳述句。
這是一個更慣用的實作,使用RangeandEnumerable#select來獲取數字和Array#sum求和:
def multiples(num)
(0..num).select { |i| i % 3 == 0 || i % 5 == 0 }
end
def summing(array)
array.sum
end
該summing方法現在只是一個包裝器,您也可以直接呼叫內置sum:
numbers = multiples(10)
sum = numbers.sum
或者
sum = multiples(10).sum
#=> 23
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495325.html
