teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

間違いを訂正

2017/06/20 08:36

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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, ... }`のような構文を使っていますね。要素数を注意深く数えると確かに10要素ありますしかし値が全て0なので、こう書くよりは`new int[10]`と書いた方が明快です。
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 * 10);
14
+ int index = (int)(dbl_data * 5);
15
15
  count_dbl_data[index]++;
16
16
  ```
17
- このようなコードを間違いなく書くにはある程度の知識も併せて必要です。乱数は絶対に1未満の値でありそれを10倍して整数化しても「決して10以上の値にはならない」ことが確信をもってわかっていなければなりません。
17
+ このようなコードを間違いなく書くにはある程度の知識も併せて必要です。乱数は絶対に1未満の値でありそれを5倍して整数化しても「決して5以上の値にはならない」ことが確信をもってわかっていなければなりません。
18
18
 
19
19
  - count_dbl_data再び
20
- 上の指摘で`new int[10]`の方がよいと書きました。しかし10はmagic numberと呼ばれる「プログラムに出現する意味がよくわからない定数」として嫌われることがあります。プログラムの論理は任意の数を10個の区分に分類して集計するので10に名前をつけたほうがより明快になります。
20
+ 上の指摘で`new int[5]`の方がよいと書きました。しかし5はmagic numberと呼ばれる「プログラムに出現する意味がよくわからない定数」として嫌われることがあります。プログラムの論理は任意の数を5個の区分に分類して集計するので5に名前をつけたほうがより明快になります。
21
21
  ```java
22
- static final int NUM_OF_CLASSIFICATIONS = 10;
22
+ static final int NUM_OF_CLASSIFICATIONS = 5;
23
23
 
24
24
  ...
25
25
  int[] count_dbl_data = new[NUM_OF_CLASSIFICATIONS];

2

誤記訂正

2017/06/20 08:36

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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

誤記訂正

2017/06/20 08:20

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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