• ベストアンサー

プログラムについて

1から453までのあいだでランダムに取得された225個の数字をいったんranに格納し、同様にran2,ran3,ran4にもランダムに取得された225個の数字を格納します。そこでran~ran4までで取得された数字の中から全部に共通して格納されている数字だけをran5に格納するようなプログラムは作成できないでしょうか? ranに格納するまでのプログラムは以下のように作成しました import java.util.*; public class RandomTest { public static void main(String[] args) { for(int i=0; i<225; i++){ int ran = (int)(Math.random() * 452)+1; System.out.println(ran); } } }

  • mos21
  • お礼率46% (128/273)
  • Java
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.2

こういうのは java.util.BitSet クラスを使うと楽かも。 まずは、取り得る値が1~453ですから int min=1; int max=453; 今回の場合、255回ランダム整数生成がワンセットで、それを4セット行うのですから BitSet が4つ必要になります。 int times=4; BitSet[] bs=new BitSet[times]; for (int i=0; i<times; i++) {   bs[i]=new BitSet(max+1); } BitSet のコンストラクタ引数には取り得る値の最大値+1を渡すようにします(配列と同様です)これで、454個のビット判定が可能になります(453個でも構わないのですが、ソースの可読性を上げる為にそうしました。数値=インデックスの方が意味を掴みやすい) 次に、255回ランダム整数を生成し、生成した数値と同様の BitSet の桁を true に変更します(ビット立て) for (int i=0; i<255; i++) {   bs[0].set((int)(Math.random()*(max-min+1))+min) ; } 同様に、bs[1],bs[2],bs[3] も処理します。 次に、4回とも選ばれた数値を求めるには、各々の bs 同士を and() すれば良いだけです。 BitSet totalbs=null; for (int i=0; i<bs.length; i++) {   if (i==0) {     totalbs=(BitSet)bs[i].clone();   }   else {     totalbs.and(bs[i]);   } } これで、totalbs のビットが立っている(True)インデックスが全ての回に出現した値になります。 最期に int[] 型に変更するのですが、SDK1.4 以降でしたらもう少し楽に出来るのですが、出来るだけ多くのバージョンでも動かせるようでないと辛いので、java.util.ArrayList を使う事にします。 ArrayList arrayList=new ArrayList(); for (int i=0; i<totalbs.length(); i++) {   if (totalset.get(i)) {     arrayList.add(new Integer(i));   } } Object[] objectArray=arrayList.toArray(); int[] ans = new int[objectArray.length]; for (int i=0; i<objectArray.length; i++) {   ans[i]=((Integer)objectArray[i]).intValue(); } 以上で ans が「4回ともに出現した値が格納されている配列」になります(もっと簡単に出来るかもしれませんが・笑)

その他の回答 (2)

  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.3

やりたいことは イメージとしてはロト6の最近4回のすべてに出現して数字をもとめたいということでしょうか? 質問にあるランダムというのは どういうランダムなのでしょうか? 重複出現がありなのですか?

  • azicyan
  • ベストアンサー率21% (368/1747)
回答No.1

225個格納する、とはどのようにするおつもりですか? 配列?? ちなみに例のプログラムでは、FOR分が実行されるたびに上書きされていくのであって、225回目の乱数がひとつ格納されるだけですよ・・・? >全部に共通して格納されている数字 と言うのは、等しい数字?と言うことですか?? ran0[255] ran1[255] ran2[255] ran3[255] ran4[255] と定義しておいてからIFを使って ran[0]の数字と等しいものがran1[x]にあるか調べ あったら、今度はそれがran2[x]にあるかしらべて・・・ と繰り返していってran4[x]まであったらran5[x]に格納していく・・・ とすれば実現できると思いますが、 アルゴリズムはいろいろあるので、 これが答えではないです。

関連するQ&A

  • コンパイルできません

    2から150の中から数字を30個取得する。というのを2回繰り返します。そして、その2回とも両方に現れた数字だけを表示させたいのですが、自分が作成したプログラムではうまくコンパイルできませんでした。シンボルを解釈処理できません。互換性のない型。というエラーが出てしまいます。ここが間違っているなどアドバイス等お願いしますm(_ _)m import java.util.*; public class RandomTest { public static void main(String[] args) { Random generator = new Random(); //2から150の中から値が30個表示される for(int i=0; i<30; i++){ int ran = (int)(Math.random() * 148)+2; } for(int j=0; j<30; j++){ int ran2 = (int)(Math.random() * 148)+2; } int ran3 = ran && ran2; System.out.println(ran3); } }

    • ベストアンサー
    • Java
  • コンパイルできません。

    コマンドプロンプト上で、乱数をいくつか取得するというプログラムを作成したいのですが、コンパイル出来なくて困っています。発生させる乱数を0~900までの数字の中から0~9個のうちのいずれかの個数だけ取得するようにしたいです。j< の所に変数を記述するのはダメなのでしょうか?わかる方いましたらお願いします。 import java.util.*; public class RandomTest{ int rand; public static void main(String[] args){    Random generator = new Random();    for(int i=0; i<1; i++){     int rand = (int)(Math.random() * 10);    }    for(int j=0; j<rand; j++){     int ran = (int)(Math.random() * 1000);       System.out.println(ran);    } } }

    • ベストアンサー
    • Java
  • 配列を使用して

    試しに1から150までの中から数字を1つ10回取得しコマンドプロンプト上に表示するというプログラムを作成しました。しかし、コンパイルはできたのですが、変な文字が表示されてしまいます。このプログラムではだめでしょうか? import java.util.*; import java.lang.*; public class hairetu { public static void main(String[] args) { Random generator = new Random(); int hairetu[] = new int[10]; for(int i=0; i<10; i++){ int ran = (int)(Math.random() * 150); hairetu[0]=ran; hairetu[1]=ran; hairetu[2]=ran; hairetu[3]=ran; hairetu[4]=ran; hairetu[5]=ran; hairetu[6]=ran; hairetu[7]=ran; hairetu[8]=ran; hairetu[9]=ran; } System.out.println(hairetu); } }

    • ベストアンサー
    • Java
  • 変数を取得したい

    例えば、次のようなプログラムで1個の乱数を取得します。その取得した乱数の一番下の桁の数字(0~9)だけに着目し、変数iなどに値を取得するといったことは出来ますでしょうか? import java.util.*; public class RandomTest { public static void main(String[] args) { Random generator = new Random(); for(int i=0; i<1; i++){ int ran = generator.nextInt(); System.out.println(ran); } } }

    • ベストアンサー
    • Java
  • 意味がわかりません

    1から10のうちで乱数を1から10個のうちいずれかの個数を表示する。というプログラムを作成したく、次のようなプログラムを作成したのですが、表示結果に0(何も表示されない)が出てしまい意味がわからなくて困っています。1以上としたのになぜ何も表示されない結果が出るのでしょうか? import java.util.*; public class RandomTest{ public static void main(String[] args){ int rand; Random generator = new Random(); //1以上10以下のintの値をrandに rand = (int)(Math.random()*10)+1; for(int j=1; j<rand; j++){ int ran = (int)(Math.random() * 10)+1; System.out.println(ran); } } } お願いします。

    • ベストアンサー
    • Java
  • java プログラム 範囲を指定した乱数

    正規乱数をボックスミューらー法で発生させて、 範囲を指定して出力したいと思ってます。 プログラムを作成してみたのですが・・・ 平均50で範囲を48から52にしたいのですが たまに範囲外というか「0.0」が出力されてしまいます。 アドバイスをください import java.util.*; public class test2{ public static void main(String args[]){ double R,S; double r[]=new double[200];  double s[]=new double[200]; double s1[]=new double[200]; Random ran=new Random();    for(int i=0;i<200;i++){     R=ran.nextDouble(); S=50+Math.sqrt(-2*Math.log(ran.nextDouble()))*Math.cos(2*Math.PI*(ran.nextDouble())); r[i]=R; s1[i]=S; if(50-2<s1[i]){ if(50+2>s1[i]){ s[i]=s1[i]; } } } for(int j=0;j<150;j++){ System.out.println(s[j]); } } } お願いします

    • ベストアンサー
    • Java
  • ランダム

    次のプログラムで同じ数字を出ないようにするにはどうすれば良いでしょうか。 import java.util.*; class RandomNum { public static void main(String args[]) { Random numRandom = new Random(); for (int i = 1; i <= 5; i++) { System.out.println(numRandom.nextInt(10)); } } }

    • ベストアンサー
    • Java
  • 九九のプログラム

    public class kuku{ public static void main(String[] args){ int[][] hyou=new int[10][10]; System.out.print(" "); int i; int yoko; for(i=1;i<hyou.length;i++){ yoko=(int)(Math.random()*10); hyou[i][0]=yoko; System.out.print(" "+hyou[i][0]); } System.out.println(); int j; int tate; for(j=1;j<hyou[0].length;j++){ tate=(int)(Math.random()*10); masu[0][j]=tate; System.out.println(hyou[0][j]); }}} これを実行すると乱数がダブって表示されてしまうのですが、ダブらないようにし、appletで実行できるようにしたいのですがどのように直したらいいのでしょうか。どなたかアドバイスください。

  • 意味がわかりません。

    2から902の中で乱数を10個ranに格納し、それをi=0からi+=ran表示するというプログラムを作成しました。下のプログラムはその1部なのですが、意味のわからない部分があり困っています。ranには得られた10個の乱数のうちの1つの数字が格納されますよね。10個取得したとはどういった処理がされるのでしょうか? public void paint(Graphics g){ int w,h; w = (int)getSize().width; h = (int)getSize().height; bufferGraphics.drawImage(image,0,0,this); bufferGraphics.setColor(Color.black); int rand; //2から902の中で乱数を10個ranに格納 for(int j=0; j<10; j++){ int ran = (int)(Math.random() * 1000)+2; for(int i=0;i<h;i+=ran){ bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); } }

    • ベストアンサー
    • Java
  • JAVA初心者です。

    以下の文法でコンパイルエラーが出ます。 添削をお願いします。 import java.util.Random; public class Test{ public static void main(String[] args){ int n; for (n = 0; n < 200; n++){ int i; for (i = 0; i < 38; i++) { Random rnd = new Random(); int ran = rnd.nextInt(10); System.out.print(ran); System.out.print(" "); for (t = 0; t < 200; t++) } System.out.println(); } } }

    • ベストアンサー
    • Java