• ベストアンサー

条件ループ

お世話になります。 JAVA初心者です。 以下のようにランダムに数字をINT型で作るまではできました。 double rnd=(Math.random()); Double db=new Double(rnd*10); int i=db.intValue(); そこで質問です。 出てきた値が「0」のときは何もせず再度上記のランダムを実行して「0」以外が出たときだけ次の作業に進むというプログラムはどのようにすればよいのでしょうか。 for文やif文も多少勉強中ですがすべて次の作業へ行ってしまうためランダムを繰り返す方法が分かりません。 よろしくお願いします。

  • homma
  • お礼率84% (744/884)
  • Java
  • 回答数4
  • ありがとう数6

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

  • ベストアンサー
  • ww-_-ww
  • ベストアンサー率51% (46/89)
回答No.1

プログラムではなく、言葉で説明すると 書かれた3行のプログラムを別メソッドとし、戻り値をint型にする。 While文の条件内でそのメソッドを実行し、戻り値が0かどうか判断すれば0の場合はループ、0以外の場合はループを抜けるという処理がつくれるんじゃないでしょうか?

homma
質問者

お礼

回答ありがとうございます。 While文ですか、まだ勉強していない項目でした。 勉強してみます。 なお、サンプルプログラムを教えていただけるとうれしいのです。 よろしくお願いします。

その他の回答 (3)

  • isi0611
  • ベストアンサー率34% (46/134)
回答No.4

お疲れ様です。 参考になればと思い、例を挙げさせて頂きます。 while文を使う場合の参考例 int i = 0; while(i == 0) { double rnd = (Math.random()); Double db = new Double(rnd * 10); i = db.intValue(); } for文、if文を使う場合の参考例 for(;;) { double rnd = (Math.random()); Double db = new Double(rnd * 10); int i = db.intValue(); if (i != 0) { break; } } ちなみに double rnd = (Math.random()); Double db = new Double(rnd * 10); int i = db.intValue(); の3行はシンプルに以下のように1行にもできますよ。 int i = (new Double(Math.random() * 10)).intValue();

homma
質問者

お礼

回答ありがとうございます。JAVA初心者なものでいまだ完成していませんでした。参考プログラム大変勉強になります。

  • ww-_-ww
  • ベストアンサー率51% (46/89)
回答No.3

ちょっとだけヒントを。 public class Main { public static void main(String args[]) { while(true){ System.out.println("乱数の値"+ test()); } } private static int test(){ double rnd=(Math.random()); Double db=new Double(rnd*10); return db.intValue(); } } 上記プログラムは無限ループとなっていますが、このWhile文のループを抜ける条件を考えればいいだけですよ。 あと、上記プログラムを実行してみれば、乱数に何が出力されているかわかると思います。

homma
質問者

お礼

何度もすみません。 本当にありがとうございました。 早速試してみます。 P.S OKWEBは役に立つサイトだと思います。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

do{}while(); を使うのがいいね。

homma
質問者

お礼

回答ありがとうございます。 do{}while();文はまだ勉強していませんでした。 早速調べてみます。

関連するQ&A

  • javaの配列部分ででエラーがでます。

    javaの配列部分ででエラーがでます。 マインスイーパを作っており爆弾の位置を決めるところでエラーの原因がわからず困っています。 9×9で、 ランダムでかぶらないように10個の爆弾を置くプログラムを作りたいです。 Random rnd=new Random(); int[][] mine=new int[8][8]; for(int i=0;i<=9;i++){ int yoko=(rnd.nextInt()>>>1)%9; int tate=(rnd.nextInt()>>>1)%9; if(mine[yoko][tate]!=10)mine[yoko][tate]=10; //爆弾があるところは10 else i--; } よろしくお願いします。

    • ベストアンサー
    • Java
  • 乱数のdouble型について

    JSPから下記のクラスファイルを呼び出し、戻り値を返すように作りたいのですがうまくいきません。 1.Math.floor(Math.random()*100)-50 上記で実行しても小数点以下がでてしまいます。 出ないようにするのは無理なのでしょうか? 2.乱数はdouble型以外だめなのでしょうか? コンパイルするとdouble型なので間接参照できません。というようなエラーが出てしまいます。 これは結果を文字型に変更して戻り値として返したいのですができません。 どうすれば理想どおりにできるようになりますか? public String getR(){  double rnd = Math.floor(Math.random()*100)-50;  if(rnd.length = 4){   rnd = rnd.substring(0,2) ;  }  else{   rnd = rnd.substring(0,3) ;  }  _R = rmd;  return _R; }

    • ベストアンサー
    • Java
  • 色の数値を別のフォームに引き渡したいです。

    色の数値を別のフォームに引き渡したいです。 Random rnd = new Random(); int red = rnd.Next(256); int green = rnd.Next(256); int blue = rnd.Next(256); このint redやint greenを新しく開くフォームにも同じ値を呼び出したいのですが、、、 よろしくお願いします。 開発環境はVC#2008です。

  • 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
  • javaでべき乗余

    テストプログラムとしてjavaでべき乗余を求めるプログラムを作っているんですがint N の大きさを大きくするとかなり時間がかかってしまいます。実行時間を早くする方法はないでしょうか? import java.math.BigInteger; import java.util.Random; public class s1{ public static void main(String args[]){ BigInteger a = new BigInteger("2"); int N = 100000; BigInteger n,p,q; Random rnd = new Random(); BigInteger f[] = new BigInteger[N]; int bit = 512; int k = 10; p = new BigInteger(bit,k, rnd); q = new BigInteger(bit,k, rnd); n = p.multiply(q); int j; for(j=0;j<N;j++){ f[j]=(a.modPow(BigInteger.valueOf(j), n)) ; } for(j=0;j<N;j++){ System.out.println(j +"="+f[j]); } } }

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

    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
  • 意味がわかりません

    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で数独の自動解法プログラム

    Javaで次のようなプログラムを作りました。 次に、ここから実行で得られた数独を自動解法プログラムによって、解が「1つ or 複数」かを調べるようにしたいのですが、その自動解法プログラムは新しく作らなければいけないのでしょうか。 import java.util.Random; public class NumberPlace { public static void main(String[] args) { int i, j, k, l, m, n, check=0, count=0, tmp; int a[][] = new int [9][9]; Random rnd = new Random(); int ran; Random rnd1 = new Random(); int ran1; Random rnd2 = new Random(); int ran2; boolean A=false; while(A==false){ A=true; for ( i=0; i<9; i++ ) for ( j=0; j<9; j++ ) a[i][j] = 0; count = 0; for ( i=0; i<9; i++ ) { for ( j=0; j<9; j++ ) { ran = rnd.nextInt(9); tmp = ran + 1; check = 0; //System.out.println(tmp); for ( k=0; k<j; k++ )  //横列に入る数字をチェック if ( a[i][k] == tmp ) check = 1; for ( k=0; k<i; k++ )  //縦列に入る数字をチェック if ( a[k][j] == tmp ) check = 1; for ( k=(i/3)*3; k<(i/3)*3+3; k++ )  //ボックスに入る数字をチェック for ( l=(j/3)*3; l<(j/3)*3+3; l++ ) if ( a[k][l] == tmp ) check = 1; if ( check == 0 ) a[i][j] = tmp; if ( check == 1 ) j--; if ( count > 50000 ){ A=false;break;} count++; } count = 0; } } for ( i=0; i<30; i++ ) {    //0を入れる回数 ran1 = rnd1.nextInt(9); m = ran1; ran2 = rnd2.nextInt(9); n = ran2; if ( a[m][n] == 0 ) {  //0にしようとした場所が既に0だったら直前に戻る i--; } a[m][n] = 0; } for ( i=0; i<9; i++) { for ( j=0; j<9; j++ ) { if ( a[i][j] < 10 ) { System.out.print(" "); } System.out.print(a[i][j]);       } System.out.print("\n"); } } } これを(最初に入れる0の数を30個として)実行すると、次のようになります。 0 7 6 9 4 1 8 2 5 2 0 5 3 7 0 9 4 0 9 0 4 8 2 5 0 3 7 1 0 2 0 0 0 5 0 6 6 9 3 1 0 0 0 8 2 7 0 8 0 0 0 0 1 4 0 0 0 0 0 0 0 0 3 4 3 0 5 6 8 2 7 9 5 2 9 4 3 7 0 0 8 皆さんの回答の程宜しくお願いします。

  • 0が表示されてしまいます

    次のようなプログラムを作成し、3つの配列の共通部分を表示したいのですが、うまく表示されず0が何個も表示されました。おかしい部分は/**/で囲みましたので、なぜ0が表示されるのかわかる方いましたら教えてください。お願いします。 import java.util.*; import java.lang.*; public class hairetu { public static void main(String[] args) { Random generator = new Random(); int hairetu[] = new int[90]; for(int i=0; i<90; i++) { hairetu[i] = (int)(Math.random() * 450); } int hairetu2[] = new int[90]; for(int i=0; i<90; i++) { hairetu2[i] = (int)(Math.random() * 450); } int hairetu3[] = new int[90]; int k = 0; for(int i=0; i<90; i++) { for(int j=0; j<90; j++) { if(hairetu[i] == hairetu2[j]) { hairetu3[k] = hairetu[i]; System.out.println(hairetu3[k]); k++; } } } System.out.println("\n---------------------------------\n"); int hairetu4[] = new int[90]; for(int i=0; i<90; i++) { hairetu[i] = (int)(Math.random() * 450); } /* int hairetu5[] = new int[90]; int m = 0; for(int i=0; i<90; i++) { for(int j=0; j<90; j++) { if(hairetu3[i] == hairetu4[j]) { hairetu5[m] = hairetu3[i]; System.out.println(hairetu5[m]); m++; } } }*/ } }

    • ベストアンサー
    • Java
  • Javaについてすこし教えてください。Math.random()につい

    Javaについてすこし教えてください。Math.random()についてです。 例えばint iに0から51までのランダムな数を入れたいときはとりあえずint型にキャストするとして i=(int)(Math.random()←ここからどういった感じにすれば良いのでしょうか? そもそもMath.randomの使い方がいまいち分かりません。 教えてください><

    • ベストアンサー
    • Java

専門家に質問してみよう