前提・実現したいこと
n個の整数が配列arrとして与えられたとき,その中で,足して0となる2数があるかどうか判定するメソッドを作成したいです。
足して0となる2数がある場合は「true」,そうでない場合は「false」と返します。
発生している問題・エラーメッセージ
irb> has_duplicates? [1, 2, 3] => false irb> has_duplicates? [1, 0, 3] => true irb> has_duplicates? [2, 4, -2] => true irb> has_duplicates? [2, 4, 0, -1] => true irb> has_duplicates? [4, 1, 8, -2, 0] => false irb> has_duplicates? [0, 2, 8, 3, -1] => false
試してみたところ、配列の中に(両端を除く)0があると「true」と返されてしまうようです。
どこをどのように直せば良いか教えていただきたいです。
該当のソースコード
Ruby
1def has_duplicates?(arr) 2 0.step(arr.length-2) do |j| 3 j+1.step(arr.length-1) do |i| 4 if arr[j] + arr[i] == 0 5 return true 6 else 7 #nothing 8 end 9 end 10 end 11 return false 12end
初心者なので汚いプログラムだと思いますがお許しください。
やっていることは、j を配列の初項から末項の一つ手前まで動かす間に、i を j+1 番目から末項まで動かすことで、ある j に対しその後ろの項が「足して0になるか」を一つずつ調べています。
あった場合はその時点で「true」を返し、最後までなければ「false」を返すようにしています。
試したこと
いくつか具体的な配列を用いて試しました。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/23 06:47