私はChris Pine のチュートリアルの第 7 章で独自のアルファベット検索を作成しようとしましたが、バイナリ メソッドを実装する必要がありました。文字列入力には有効性がないため、整数と文字列が混在するとどうなるかわかりませんが、文字列のリストのみに対してそれを行うという考えでした。
#get list of strings
puts "type words to make a list. type 'exit' to leave program."
x = ()
list = []
while x.to_s.upcase != 'EXIT'
x = gets.chomp
list.push(x)
end
list.pop
#binary method
nano = list.length
half= list.each_slice(nano/2).to_a
left = half[0]
right = half[1]
nanol=left.length
nanor=right.length
#initialize results array
A = []
for i in 0..nano-1
smallest_left = left.min
smallest_right = right.min
#no difference with this commented out or not
#if nanol==0
# A<<smallest_right
#end
#if nanor==0
# A<<smallest_left
#end
#error message points to the line below (rb:44)
if smallest_left<smallest_right
A << smallest_left
print A
left.pop[i]
elsif smallest_left>smallest_right
A << smallest_right
print A
right.pop[i]
else
print A
end
end
入力 = ['z','b','r','a'] の場合、リストがエラーでソートされていることがわかります。
["a"]["a", "b"]["a", "b", "r"] rb:44:in `<': comparison of String with nil failed (ArgumentError)
私のエラーを見るのを手伝ってください:) よろしくお願いします!