def binarysearch(a, b, tofind, stringarray)
k=(a+b)/2
if a==b
return nil
end
if (stringarray[k]).include? tofind
return stringarray[k]
end
if (stringarray[k]<=>tofind)==1
binarysearch(a,k,tofind,stringarray)
end
if (stringarray[k]<=>tofind)==-1
binarysearch(k,b,tofind,stringarray)
end
if (stringarray[k]<=>tofind)==0
return stringarray[k]
end
end
これはバイナリ検索アルゴリズムです。 aとbは作業中の配列インデックスで、tofindは検索対象の文字列、stringarrayは文字列の配列です。残念ながら、この関数を実行しようとするたびに、次の構文エラーが発生します。ルビのバイナリ検索アルゴリズムの問題
undefined method `include?' for 1:Fixnum (NoMethodError)`
これはfixnumではありません。私はRubyにはかなり新しかったので、明らかなものが簡単に見つからないことがあります。何かアドバイス?私はのStringArrayを宣言するところ
これは、次のとおりです。(Netbeansのは、それが配列であることを述べている)
strings=Array.new
newstring=""
until newstring=="no" do
newstring=gets.chomp
strings[strings.size]=newstring
end
ちょうど注記:RubyはCではありません。上記は有効なプログラムですが、それはあいまいで複雑です。 Rubyを学ぶことの半分は、表現力豊かなよく考えられたコードを書くことを学んでいます。あなたがここでそれをしていたら、あなたはこの問題にぶつからないだろうと思う。 Russ LousonによってEloquent Rubyをチェックしてください。 – coreyward
上記のコードをRubyierの方法で書き直しました:http://voidptr.heroku.com/pastes/83c179d6feb470fe12cca09811190aea4d8db53b。まだ動作しませんが、Rubyコードが通常どのように見えるかがわかります。楽しむ! –
この問題を示すサンプル配列と呼び出しを提供してください。明らかに 'stringarray [k]' _はFixnumです。 – Phrogz