- ベストアンサー
Javaのプログラムをルビー言語に変換する方法
- 10~50までの素数が格納されている配列をrubyで作りたいです。
- 現在のJavaのプログラムに間違いがあるかもしれません。
- Ruby初心者でも分かりやすい方法で教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
java,C言語でおなじみのfor文と全く同じ構文はrubyには有りません。 (そのため、初心者がつまずきやすいのも確かですが) 1から100の繰り返しは for i in (1..100) do ・・・ end のようになります。 配列の処理は以下のようにします。(他にもやり方はありますが1つの例です) 配列を格納する変数をhairetuとすると hairetu = [] # 配列の初期化 hairetu << 5 # 配列へ追加 hairetu[0] = 5 と同じ hairetu << 7 # 配列へ追加 hairetu[1] = 7 と同じ 上記をふまえて、今回の質問者さんの内容をrubyでかくと以下のようになります ------------------------------------------------------------- #素数を求めるメソッド(パラメータは開始の数値、終わりの数値) def sosu(start_i,end_i) ary = [] #素数を格納する配列を初期化 for i in (start_i..end_i) do count = 0 for j in (1..i) do if i%j == 0 count += 1 #rubyはcount++の命令はないのでこの形式になる end end if count == 2 #print "i=",i,"\n" #素数の印字(現在はコメントにしてある) ary << i #配列にiを加える end end p ary #配列の内容を印刷 end sosu(10,50) -------------------------------------------------------------------- 実行結果 [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
自分の意図にあわなかったからといって、何の説明もなく質問を打ち切るのは、どうかと思いますよ。 > まだruby初心者で分からないことだらけですので、 > 簡単な方法ではなく、出来ればfor文を使用したやり方で教えていただけると幸いです。 Rubyのforは、Javaの for( i: Object) 形式のものにあたり、C等でもおなじみの for(~;~;~)形式のものでも、Basic等のfor ~ to ~ でもありません。 また、Rubyプログラマ達の間では、for i in Obj より Obj.each ~ の方が好まれる傾向にあります。 配列に収めるにしても、空の配列に<<で追加、というのが一般的な方法です。これも、Javaの通常の配列では使わない方法です。(Listではaddを使いますが) Rubyの勉強がしたいのなら、Rubyの流儀に慣れることも必要です。 それでも、forで、というのなら まずは、御自身で調べてからにしてください。 forのような基本構文は、入門書でも最初の方にあるはずです。 そのJavaのプログラムの「意味」がわかっているなら、簡単に変換できるはずです。 それでわからない部分はっきりさせた上で集中的に聞かないと、身に付きませんよ。
お礼
申し訳ありません。 私の勉強不足でした。 自分で調べたりした後に、もっと理解を深めたうえで また分からないことがあったら聞こうと思います。 有難うございました。
お礼
詳しく教えていただき有難うございました。 大変参考になりました。