0
class Triplet
def initialize(array,sum)
@array = array.sort()
@array_size = array.size()
@sum = sum
@result = []
end
def get_triplet
@array[0..-3].each_with_index do |arr, ind|
pointer_one = ind + 1
pointer_two = @array_size - 1
while (pointer_one < pointer_two)
temp_sum = @array[pointer_one] + @array[pointer_two] + arr
if(temp_sum == @sum)
@result.push([@array[pointer_one], @array[pointer_two], arr])
elsif temp_sum < @sum
pointer_one = pointer_one +1
else
pointer_two = pointer_two -1
end
end
end
end
def get_result
@result.each do |res|
puts res
end
end
end
puts "Enter the array of numbers"
array = gets.chomp
array = array.split(' ')
array_integer = array.map{|a| a.to_i}
puts array_integer
puts "Enter the sum"
sum = gets.chomp
puts sum
t1 = Triplet.new(array_integer,sum.to_i)
t1.get_triplet
t1.get_result
誰も私に修正を提案して、無限にループしないようにすることができます。その和が@sumである配列内の三つ組を見つけるプログラムです。そのget_tripletメソッドのループ。 Initializeメソッドは配列、配列サイズを設定します。 get_tripletメソッドは、結果配列に合計が@sumである3つの数値をすべて格納する必要があります。Rubyコードを無限にループする
いつも、 'temp_sum == @ sum'は、ポインタが一度もポインタも変更されないので、ループに巻き込まれてしまいます。したがって、pointer_oneは常にpointer_twoより小さくなり、常にtemp_sum == @sumが見つかるでしょう。 – RToyo