みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

変数をランダム発生させる

http://security.okwave.jp/kotaeru.php3?qid=2243075
上記の質問に回答しようとしましたが締め切られているので皆さんに公開して問題点を指摘していただきたいと思います。
import java.io.*;
class RandomEditor {
public static void main(String args[]){
try{
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("変数は幾つ創りますか?");
int var = Integer.parseInt(reader.readLine());
int[] variable = new int[var];
for(int i = 0; i<variable.length;i++){
variable[i] = i + 1;
}
System.out.println("変数は" + variable.length + "個創りました");
double[] probability = new double[variable.length];
for(int i = 0; i<variable.length;i++){
System.out.println("変数" + (i + 1) + "の発生率を%で入力してください");
probability[i] = Double.parseDouble(reader.readLine())/100;
}
setProbability(variable,probability);
break;
}

}catch(IOException e){
System.out.println(e);
}

}
public static void setProbability(int[] v,double[] p){
int i = 0;
StringBuffer[] sbArray = new StringBuffer[v.length];
for(int n = 0;n<v.length; n++){
sbArray[n] = new StringBuffer();
}
for(int k =0; k<10;k++){

double randomNumber = Math.random();

for(i = 0; i < v.length ; i++){
if(randomNumber < p[i]){
sbArray[i].append("* ");
}
}
}
for(i=0;i<v.length;i++){
System.out.println("変数:"+(i+1)+"の発生度数" + sbArray[i].toString());
}
}
}

投稿日時 - 2006-07-02 21:10:37

QNo.2251661

暇なときに回答ください

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

プログラムとして何が問題かですよね?
そしてこれは貴方ではない誰かが使うのであれば、
特に入力部:
1.入力部がIntegerの保証がないにもかかわらず、parseIntを使っている。例外をはきます。スペースを含んでいても数字以外の何かを含んでいてもはきますので、入力部のparseIntをcallする前にスペースを削り、それが数字かどうかをチェックをします。
2. 発生率が合計で100%にならなければならないのにそのチェックを怠っている。
3. このプログラムでwhile(true)を使っている意味が分からない。最後のbreakで確実に1回でぬけていますよね?
 
 詳細に見ればまだまだあるかと思います。前の質問スレも少し覗かしてもらいましたがはっきりしないことが多いです。

 はっきりしないのは、1. 問題点とおっしゃりますが、あなたが感じる問題点はどこにあるのでしょう。2. テストをしていて、その問題があると気づいたのでしょうか?ただ漠然と問題点をといっても答えるほうが大変かと思います。プログラムとしては大きくないしさほど難しい点があるわけではないと思いますが、プログラム組む前に設計・イメージをされてからプログラムを組んだほうがいいのではないでしょうか?あまりにもイメージ(設計)がなされていない気が私の目から見るとそう見えます。入力部も出力部の定義も少しあいまいな気もしますし・・・その上、テストまたはテストの報告がなければ問題点がどこかなんてこちらも答えようがないと思います。
 ざっと見てただいえることは入力部のチェックがあまりにもなさ過ぎます。ただ動けばいいというプログラムです。チェックをするならまだwhile(true)の意味があるかもしれません。

投稿日時 - 2006-07-03 16:21:41

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

入出力部分は最高の出来栄えですね。
でも実際の変数値が出力されていないと
思います。

元の質問者様自身なにを求めたいか
あまり明確でなかったような気もするのですが。。。
私自身 変数の数量が変化する場合

random変数の発生確率を制御する方法は
解らなかったです。

投稿日時 - 2006-07-03 11:13:23

補足

回答有難うございます。実行結果は以下のとおりです。
確かにもとの質問者の意図がいまいち確かでなかったのでこんなものでいいのかと思い皆さんのご意見を求めた次第です。

C:\java\axiz\July_2006>java RandomEditor
変数は幾つ創りますか?
3
変数は3個創りました
変数1の発生率を%で入力してください
40
変数2の発生率を%で入力してください
40
変数3の発生率を%で入力してください
20
変数:1の発生度数* * * * * *
変数:2の発生度数* * * * * *
変数:3の発生度数* * *

投稿日時 - 2006-07-03 16:05:01

あなたにオススメの質問