3

以下のコードがあります。メソッドsum_to_n?は、整数の配列arrと整数を引数として取り、2 つの要素の合計がになる場合nに返します。ゼロで空の場合に返されるはずですが、返され続けます。truearrntruearrnfalse

def sum_to_n?(arr, n)
  hash = Hash.new(0)
  arr.each do |val|
    if hash.key? val
      return true
    else
      hash[n-val] = val
    end
  end
  return false
end

私は何を間違っていますか?

4

2 に答える 2

2

あなたのコードは (ほぼ) 正しいですが、あなたの期待は間違っています。true2 つ (または 1 つ) の要素がある場合、コードは を返しますn。空の配列を渡すと、加算されるn要素はありません (そもそも配列に要素がないため)。したがって、 を取得しますfalse

空の配列に対して返さtrueれるようにしたい場合、それは論理的に従わない例外的な動作になります。などの条件を設定する必要があります。

return true if arr.empty?

あなたのコードで。

于 2013-10-13T23:17:20.333 に答える