- ベストアンサー
ぞろ目を判定するプログラムの作成方法
- ぞろ目が出た場合に「ぞろ目です」と表示するプログラムを作成する方法について質問です。
- 適当な乱数を発生させ、その乱数を配列に格納します。
- 配列の要素がすべて同じ数字であれば「ぞろ目です」と表示し、そうでなければ「ぞろ目ではありません」と表示します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>もし何か間違いがありましたら、再三で申し訳ありませんが >ご指摘お願いいたします。 ひとまずこれでいいんでないのかな。 言いだしたら切りがないけど、私なら ・キャストが醜いので Math.random() ではなく Random.nextInt() を使う ・「ぞろ目」を判断する関数を isRepDigit() のような名前で作成して、 if ( isRepDigit(a) ) { System.out.println("ぞろ目です"); } 特に、関数にすると、処理に名前が付けられるのでコードが読み易くなります。
その他の回答 (2)
- koko_u_
- ベストアンサー率18% (459/2509)
>for(int i = 1; i < (桁数); i++){ > if(array[0] == array[i]){ > System.out.println("ぞろ目です。"); > } >} > >では、正確なぞろ目が得られないのです。。。 これだと、1113 などの場合に、繰り返し「ぞろ目です。」と印字されて具合が悪いでしょう。 for ループの中で array[0] != array[i] なる i が発見された場合はループから抜けて下さい。 途中でループを抜けずに「最後まで」array[0] == array[i] であった場合がぞろ目です。
- koko_u_
- ベストアンサー率18% (459/2509)
最初の目(array[0])とそれ以降(array[1] ~ array[n-1])を for ループでどんどん比較すればよいでしょう。 最後まで同じであれば『ぞろ目』ですね。
お礼
ご回答ありがとうございます。 そうですね、私も一度それを考えました。 しかし、例えばその場合 12641 でも、最終的に「ぞろ目」と表示されてしまいます。 (なぜなら、array[0] == array[4] となり、ぞろ目になってしまいます。) ですので、 for(int i = 1; i < (桁数); i++){ if(array[0] == array[i]){ System.out.println("ぞろ目です。"); } } では、正確なぞろ目が得られないのです。。。 しかし、koko_u_さんの仰っている事と 私の考えているプログラムに違いがあるのかもしれません。。。 う~む・・・
お礼
ご回答ありがとうございます。 koko_u_さんのアドバイスを受け、プログラムを作ってみました。 「最後まで」というポイントを、以下のようにとらえてみました。 ----------------Program------------------ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ぞろ目 { public static void main(String args[])throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("桁数をにゅうりょくして。"); String str = br.readLine(); int num = Integer.parseInt(str); int a[] = new int[num]; for(int i = 0; i < num; i++){ a[i] = (int) (Math.random()*10); System.out.print(a[i]); } for(int i = 1; i < num; i++){ if( a[0] != a[i] ){ break; } else if( i == num-1 ){ System.out.println("\nぞろ目です。"); } } } } ----------------Program------------------ もし何か間違いがありましたら、再三で申し訳ありませんが ご指摘お願いいたします。 一応、ぞろ目では「ぞろ目」 そうでなければ何も表示されないようになっています。