回答編集履歴
3
間違いを訂正
answer
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
> 乱数の生成のさせ方は下のソースコードのような形でよろしいのでしょうか。
|
2
2
|
|
3
|
-
間違いはないと思いますが、「あまりよくない」と思えることがあるのでコメントしてみます。
|
3
|
+
致命的な間違いはないと思いますが、「あまりよくない」と思えることがあるのでコメントしてみます。
|
4
4
|
|
5
5
|
- dbl_data
|
6
6
|
宣言をfor文の外側で行っています。しかしこの変数にアクセスしているのはfor文の内側のブロックの中だけです。こんなときはfor文の内側で宣言した方がよいと思います。「変数を宣言するとその度に何かの処理が動いて遅くなるような気がする」ことがあるかも知れませんが、Javaであればそういうことを気にする必要はありません。(大抵のコンパイラー言語でも同様だと思います)
|
7
7
|
|
8
8
|
- count_dbl_data
|
9
|
-
初期値として`{ 0, 0, ... }`のような構文を使っていますね。要素数を注意深く数えると
|
9
|
+
初期値として`{ 0, 0, ... }`のような構文を使っていますね。要素数を注意深く数えると必要な要素分だけ定義できているかどうか確認はできますが、しかし値が全て0なので、こう書くよりは必要な要素数を用いて`new int[5]`と書いた方が明快です。
|
10
10
|
|
11
11
|
- if文の羅列
|
12
12
|
こういう「同じような処理を並べる」のは「書くときに間違い易く、また間違いがないかを確認するときにめんどくさい」ため多くのプログラマーはいやがると思います。プログラミングに慣れてくると「いかに単純にかけるか」をだんだんとうまく書けるようになってきます。ここでやりたいことは「ある値が等間隔で区切られた区間のどこに属するか」なのですが、次のような工夫ができます。つまり30行程度のif文の羅列が2行で済むことに・・・
|
13
13
|
```java
|
14
|
-
int index = (int)(dbl_data *
|
14
|
+
int index = (int)(dbl_data * 5);
|
15
15
|
count_dbl_data[index]++;
|
16
16
|
```
|
17
|
-
このようなコードを間違いなく書くにはある程度の知識も併せて必要です。乱数は絶対に1未満の値でありそれを
|
17
|
+
このようなコードを間違いなく書くにはある程度の知識も併せて必要です。乱数は絶対に1未満の値でありそれを5倍して整数化しても「決して5以上の値にはならない」ことが確信をもってわかっていなければなりません。
|
18
18
|
|
19
19
|
- count_dbl_data再び
|
20
|
-
上の指摘で`new int[
|
20
|
+
上の指摘で`new int[5]`の方がよいと書きました。しかし5はmagic numberと呼ばれる「プログラムに出現する意味がよくわからない定数」として嫌われることがあります。プログラムの論理は任意の数を5個の区分に分類して集計するので5に名前をつけたほうがより明快になります。
|
21
21
|
```java
|
22
|
-
static final int NUM_OF_CLASSIFICATIONS =
|
22
|
+
static final int NUM_OF_CLASSIFICATIONS = 5;
|
23
23
|
|
24
24
|
...
|
25
25
|
int[] count_dbl_data = new[NUM_OF_CLASSIFICATIONS];
|
2
誤記訂正
answer
CHANGED
@@ -41,7 +41,7 @@
|
|
41
41
|
生成した乱数をグラフになかなかできません。
|
42
42
|
|
43
43
|
本当の質問意図はこちらの方だと思いますが、上のコメントのうち「if文を減らすためにある値を別の値へ変換する」ことや「繰り返し文の中でどのように共通の書き方をするか」が考えらるようになってくるとヒストグラムを作るという論理が考えられると思います。
|
44
|
-
1000, 2000, 3000に到達しているかどうかを以下のようなループでしか書けないとしたらプログラム
|
44
|
+
1000, 2000, 3000に到達しているかどうかを以下のようなループでしか書けないとしたらプログラムを書くのは大変苦痛になることでしょう。
|
45
45
|
|
46
46
|
```java
|
47
47
|
for (int i = 0; i < count_dbl_data.length; i++) {
|
1
誤記訂正
answer
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
横軸を分類した1、2、3、4、5、としたヒストグラムを作成したいのですが
|
41
41
|
生成した乱数をグラフになかなかできません。
|
42
42
|
|
43
|
-
本当の質問意図はこちらの方だと思いますが、上のコメントのうち「if文を減らすためにある値を別の値へ変換する」ことや「
|
43
|
+
本当の質問意図はこちらの方だと思いますが、上のコメントのうち「if文を減らすためにある値を別の値へ変換する」ことや「繰り返し文の中でどのように共通の書き方をするか」が考えらるようになってくるとヒストグラムを作るという論理が考えられると思います。
|
44
44
|
1000, 2000, 3000に到達しているかどうかを以下のようなループでしか書けないとしたらプログラムコードは大変書くのが苦痛になることでしょう。
|
45
45
|
|
46
46
|
```java
|