• ベストアンサー

Randomメソッドの確率設定

プログラミング歴半年の初心者です。 よろしくお願いします。 Randomメソッドを使って、1か2のどちらかが出る と言うプログラムを作成したんですが、 例えば「1が出る確率が20パーセント」で 「2が出る確率が80パーセント」というように 変更したいのですが、どうしたらいいんでしょうか? 本来なら1と2の出る確率は50/50のを 20/80とかに変更したいということです。 どなたかご存知の方がいらっしゃったら よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.4

つまりこういうことでしょうか? 1から2ならば2,1から6ならば6と入力すると 20回試行するようにしました。 import java.io.*; public class Sample280{ public static void main(String[] args){ System.out.println("数字を入力してください。1-10"); try{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str=br.readLine(); int k=Integer.parseInt(str); for(int j=0;j<20;j++){ int i=(int)(Math.floor(Math.random()*k)+1); if(i<k){System.out.println("k="+i);} else{System.out.println("k="+k);} } }catch(IOException e){ System.out.println("I/Oエラー"); } } }

yukikoba1977
質問者

お礼

ありがとうございます。とても参考になりました。 私も早くjavaマスターしたいです!

その他の回答 (3)

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.3

2が80%の例です。設定の変更はご自分でどうぞ。 public class RandomInt{ public static void main(String []args){ int x = 0; StringBuffer sb01 = new StringBuffer(); StringBuffer sb02 = new StringBuffer(); for(int i = 0; i < 10; i++){ double y = Math.random(); if(y < 0.8){ x = 2; sb02.append("* "); }else{ x = 1; sb01.append("* "); } } System.out.println("01: " + sb01.toString()); System.out.println("02: " + sb02.toString()); } }

yukikoba1977
質問者

補足

どうもありがとうございます。コード助かりました。 ついでにお聞きしたいんですが、出る数がわからない場合 はどうしたらいいんでしょう?例えば出るのが1と2、 1から4、1から6などクライアントから設定できる場合、さらにクライアントからそれぞれの確率も設定出来る場合はどうしたらよいのでしょう? 教えていただけると助かります。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

1.Math.random()で0から9をランダムに出力させる。 2.例えば0から7だったら2を出力し8or9ならば1を  出力する。そうすれば2が出る確率が80%になる。

yukikoba1977
質問者

補足

ありがとうございます。もう一つ質問させて もらってもいいでしょうか? この場合は、はじめから1か2の2つの可能性があると 分かっているけれど、もしクライアントが  1)いくつの可能性があるか(例えば1から6までとか) 2)それぞれの出る確率(全部で100%になる) を設定できるクラスを作った場合は どうすればいいのでしょう? 図々しくてごめんなさい。 もしご存知だったら教えてもらえますか?

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

偏った乱数を作りたければラップして使えば良いでしょう。 例えばRandomから0から99までの一様乱数を取り出して20未満なら1、20以上なら2を返すようなメソッドを作れば良いです。

関連するQ&A

専門家に質問してみよう