Math.random()を使って-2,-1,1,2のいずれかの数字を取得するには、どうしたらよいでしょうか?
下記コードを書いてみたのですが、0が混じってしまいます。
JavaScript
1var a = parseInt(Math.random() * 4) - 2; // -2, -1 , 0, 1, 2
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
いちばん手っ取り早いのは、配列から引くことかもしれません。
javascript
1const list = [-2, -1, 1, 2]; 2console.log(list[Math.floor(Math.random() * list.length)]);
投稿2019/10/22 06:05
総合スコア145967
0
過去の大喜利回答をリンクしておきますね。
「-3, -2, -1, 1, 2, 3」の6つの整数をランダムで得る「いい」方法
だいたい使えるw
個人的にはこれが好き
JavaScript
1v = (Math.floor(Math.random() * 4) - 2) || 2;
投稿2019/10/22 09:21
編集2019/10/22 09:28退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/10/22 09:55
0
0が出た時、再度求め直すのも有りでは?
投稿2019/10/22 06:26
総合スコア2826
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/22 06:30
2019/10/22 06:37
2019/10/22 07:25
0
こういう感じでしょうか。
js
1[-2,-1,1,2][parseInt(Math.random() * 4)]
js
1const t = 4; 2([...Array(t+1).keys()].map(i => i - Math.round(t / 2) ).filter(i => i != 0))[parseInt(Math.random() * t)]
投稿2019/10/22 06:10
総合スコア69596
0
こんにちは
まず、以下のような、 x
の関数を考えます。
x
を 0以上1未満の数として、x
が
- 0 ≦
x
< 0.25 のとき、-2 を返す。 - 0.25 ≦
x
< 0.5 のとき、-1 を返す。 - 0.5 ≦
x
< 0.75 のとき、1 を返す。 - 0.75 ≦
x
< 1 のとき、2 を返す。
上記のような関数は、一番分かりやすく書くと、
x => { if (0 <= x && x < 0.25) return -2; if (0.25 <= x && x < 0.5) return -1; if (0.5 <= x && x < 0.75) return 1; if (0.75 <= x && x < 1) return 2; // 上記以外の場合は、何も返さないものとする。 }
となるかと思います。あるいは上記を満たす関数の他の例としては、以下のようにも書けます。これは真偽値のtrue
が、算術演算では 1
として扱われることを二カ所で利用しています。
javascript
1x => (x >= 0.5 || -1) * (1 + (x < 0.25 || x >= 0.75))
上記の関数が書ければ、以下のようにして、上記の関数に Math.random()
を与えれば、-2, -1, 1, 2 が均一に得られます。
javascript
1(x => (x >= 0.5 || -1) * (1 + (x < 0.25 || x >= 0.75)))(Math.random())
または、何回か試行するのであれば、関数を変数に保存しておいて、
javascript
1const f = x => (x >= 0.5 || -1) * (1 + (x < 0.25 || x >= 0.75)) 2 3for (let i=0; i < 10; i ++) { 4 console.log(f(Math.random())) 5} 6
とします。
- 動作確認用 CodePen: https://codepen.io/jun68ykt/pen/OJJWEGm?editors=0012
以上、参考になれば幸いです。
投稿2019/10/22 09:12
総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
-2,-1,0,1,2
答えが「等差数列」の範囲なら、算術演算子で解けますね。
(要件を満たしていませんでしたので、このコードはスルーしてください)
JavaScript
1var result = Math.floor(Math.random() * 5) - 2; 2console.log(result);
-2,-1,1,2
0
を排除する場合、等差数列ではなくなる為、Math.rondom()
の乱数生成を2回に分けました。
JavaScript
1function createNotZeroInteger (number) { 2 return Math.sign(Math.random() - 0.5) * (Math.floor(Math.random() * number) + 1) 3} 4 5console.log(createNotZeroInteger(2));
一時変数を使用して、+1
シフトする方法。
JavaScript
1function createNotZeroInteger2 (number) { 2 const temp = Math.floor(Math.random() * number * 2) - number; 3 4 return temp < 0 ? temp : temp + 1; 5} 6 7console.log(createNotZeroInteger2(2));
Re: balls さん
投稿2019/10/22 06:16
編集2019/10/22 06:42総合スコア18189
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/22 06:18
2019/10/22 06:19
2019/10/22 06:20
2019/10/22 06:33
2019/10/22 06:43
2019/10/24 06:30
0
…大喜利会場になりそうですね…
模範解答として
var i = ( Math.random() % 2 + 1 ) * ( Math.random() % 2 == 0 ? 1 : -1 ) ;//前半の%2の部分自信がない
var a = parseInt(i);
もっといい感じにイカれてる方々が技巧を凝らしたイカれたソリューションを提案してくる可能性は覚悟してください
投稿2019/10/22 06:09
総合スコア368
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/22 06:57 編集
2019/10/22 09:04
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/22 06:09