Random rand = new Random();
int random = rand.nextInt() % 7;

上記のようにランダムクラスのインスタンスを作成し
0~7までの均等な値をfor文を使って得たいのですが、
なぜかrandomの中にマイナスの値が入ってしまいます。
なぜでしょうか?あるいはこれ以外に回避できる方法は
ありますか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

ありゃ?出来ませんでしたか?


一応、私の環境で実験してみましたんですけど、特に問題無かったんですが。。
ちなみに私はJDK1.3でDOSプロンプトからコンパイル&実行です。
一応簡単なサンプルを載せておきますね

import java.util.Random;

class RandomPrint {
public static void main(String args[]) {
Random rand = new Random();
for ( int i = 0; i <10; i++){
int random = rand.nextInt(8);
System.out.println(random);
}
}
}

ちなみに前に記したURLはJDK1.2のクラスライブラリの仕様なので、
それより前のバージョンのJDKだとどうなのかはわかりません。。(^^;
説明書きによるとJDK1.0からの導入らしいので大丈夫だとは思うのですけど。。
もしかして、int random = rand.nextInt(8);の部分を
int random = rand.nextInt( 0, 8);とかしてません?
でも、これだと「シンボルを解釈実行出来ません」ってエラーになるんですよね。。。(^^;
    • good
    • 0
この回答へのお礼

親切にありがとうございました。
とりあえず、今度はJ++を使わないで、参考プログラムを試してみたいと思います。

お礼日時:2000/12/26 21:52

ランダムクラスなのですが、nextIntメソッドで0から指定された範囲の一様分布のint型の擬似乱数を返しますので、


質問のような場合は、
int random = rand.nextInt(8);
で0~7の擬似乱数が得られますよ
詳しくは、下記参照URL:Sunのクラスライブラリ仕様書参照して下さい
インデックス欄をクリック後Rの項目クリックしてスクロールしていけば
Randomクラスについて詳しく書かれてあります。

参考URL:http://www.javasoft.com/products/jdk/1.2/ja/docs …

この回答への補足

nextInt()の()の中に数値を入れると引数が多すぎると出ます。リファレンスマニュアルを見ても引数の指定はありませんでした。syunponさんの参考URLで調べてみます。ありがとうございました。

補足日時:2000/12/25 20:36
    • good
    • 0

同じ数字が、近い間できるだけに出ないように


するためには、適当におもみ付けをつけて、
同じ数字ははじいてしまえば良いような気がします。
(ゲーム開発の現場などで一見ランダムと見せかけて
 本当は裏で工作するときによく使う手法です)
例えば、以下の2つの判定をするだけでも、有効です。
(1)8つのキュー配列を用意し、ランダム値を一回だす
 ごとに、このキュー配列に数字を入れます。
 そして、新たに数字を振るときに、8つのキュー配列
 中にすでに1回その数字がでていれば、30%の確率
 で振りなおし、2回その数字が出ていれば、50%の
 確率で振りなおす。
 長期的に見た場合のランダムを期待するだけではなく、
 短期的にもランダムであることを意図的に仕向けるわ
 けですね。
 %のところは重みづけです。
 ご自由にお考え下さい。
    • good
    • 0

マイナスの値が入らないようにしたいのであれば、


単純に、絶対値に変換してから7で割ってはダメ
なのでしょうか。

ではでは☆

この回答への補足

試してみたのですが、7回中、同じ値が数回現れます。J++のバグでしょうかね~。

補足日時:2000/12/24 23:27
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q ランダムはどのような意味で使われていますか?

 ランダムはどのような意味で使われていますか?
 普通ランダムという言葉は"無作為""無造作"などという意味で使われています。
 しかし情報系の分野で"ランダムアクセス"という言葉があるのですが、そこでは逆にランダムが"任意の"という意味で、ランダムアクセスは”任意の記憶領域への直接アクセス”を意味を表します。
 そこで質問です。実際のところランダムというのは英語圏でどのような意味で使われているのでしょう?日本で言うところの”適当”という言葉と同じニュアンスで使われているのでしょうか?
よろしくお願いします。

Aベストアンサー

ランダムは確かに「無造作」とか「盲滅法」です。そして、情報系のランダムアクセスと言うのも実は同じ意味から来ています。コンピュータの歴史を考えると、ランダムアクセスと言う言葉に対する違和感がなくなると思います。

パンチカードとか磁気テープなどはシーケンシャル(sequential = 連続して続いて起こる)の記憶媒体です。情報の頭から読み出して、順番に情報を読みながら、目指す情報に辿り着きます。当然時間が掛かりますね。

その後登場したRAMとかハードディスクなどはランダムアクセス系の記憶媒体です。頭から順番に情報を読み出す必要なく、探しているデータがある所に飛んで行き、読み出し/書き込みする事が出来ます。それまでシーケンシャルの記憶媒体を使って順番に情報を読んでいた人達には、ランダムアクセス系の媒体は「無造作/盲滅法」なのがお分かり頂けますか。勿論コンピュータですので、本当に盲滅法に媒体を読みあさっているのではなく、情報がどこにあるか計算して、任意の場所にアクセスしています。しかし、いくつものデータを次々と読み出したり、書き込んだりさせると、見た目(想像力を使って下さい)がハチャメチャに、盲滅法に、適当にアクセスしているようだからランダムアクセスなのです。

英国圏の「ランダム」の使われ方は、恐らく質問者さんのお考え通りですよ。適当、無造作、盲滅法などです。

ランダムは確かに「無造作」とか「盲滅法」です。そして、情報系のランダムアクセスと言うのも実は同じ意味から来ています。コンピュータの歴史を考えると、ランダムアクセスと言う言葉に対する違和感がなくなると思います。

パンチカードとか磁気テープなどはシーケンシャル(sequential = 連続して続いて起こる)の記憶媒体です。情報の頭から読み出して、順番に情報を読みながら、目指す情報に辿り着きます。当然時間が掛かりますね。

その後登場したRAMとかハードディスクなどはランダムアクセス系の記憶媒...続きを読む

Q&= ~0x0c; &= ~0x03; |=1;

JavaScriptで分からないコードがあるので教えてください。


■変数設定
var hoge = 0;


■変数格納
・キーを押した時の条件分岐
  ~なら hoge |= 1;
  または hoge |= 2;
  または hoge |= 3;
  または hoge |= 8;

・キーを離した時の条件分岐
  ~なら hoge &= ~0x0c;
  または hoge &= ~0x03;


■変数使用
・swithch文の条件分岐に利用
  (hoge&0x03)
  (hoge&0x0c)


■質問
・どういう意味でしょうか?
・文字コード?
・ビット演算?

Aベストアンサー

ビット演算してるわね

x = x + a

x += a
って書くことができるの

つまり
hoge |= 1

hoge = hoge | 1
のことね

~はNOTのこと

0x
はアスキーコードの16進数表記ねきっと

0x0c は改ページを意味していて
0x03 は文章の最後を意味している
と思われるわ
全文がないので推測だけど

Q頻出関数とその意味をランダムで一行表示するphpスクリプトはありませんか。

頻出関数とその意味をランダムで一行表示するphpスクリプトはありませんか。
自分で作れと言われればそれまでなのですが、すでにあればと思いまして。

Aベストアンサー

array_rand

Qjavaについて教えてください。java初心者です。int arr[] = new int[

javaについて教えてください。

java初心者です。

int arr[] = new int[] { 3, 1, 4, 1, 5, 9, 2, 6 };はどういうことなんでしょうか?
教えてください。

Aベストアンサー

int[] arr = new int[8];
arr[0] = 3;
arr[1] = 1;
arr[2] = 4;
arr[3] = 1;
arr[4] = 5;
arr[5] = 9;
arr[6] = 2;
arr[7] = 6;

https://ideone.com/OMAI0E

Qランダムに並んでるキーボードのキーの配列、何か意味が?

思うのですが、キーボードってよく見ると適当に並んでるように思うのは自分だけでしょうか?
キーボードのキーそれぞれの配列って、どうしてこうなんでしょうか?ふと気になります。例えば、Qの隣がW・E・R・・と続いてますよね?
何か意味があってこの配列になってるのでしょうか?知ってる方、教えてください。

Aベストアンサー

過去ログにそのあたりの詳しい回答がありました・
http://oshiete1.goo.ne.jp/kotaeru.php3?q=42845

確かに#1のlinus3030さんの説が有力なのですが、別の説も唱えられているようですね。
http://contest.thinkquest.gr.jp/tqj1999/20204/ja/history/extra1.html
このURLも詳しいです。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=42845

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

Q人の性格を表す時に使うrandomの意味

映画女優のインタビューやYoutubeのコメント欄でよく

I'm random や He's so random

などのような人の性格を表すような使われ方をしているのをたまに見かけます。
ネイティブの方にとってはどのような意味で使われているのでしょうか?

実際の例文として
インタビュアーからある女優に対して「自分自身をどのように捉えているか(どのように思うか)」という質問に対して
I'm complete nerd. And I just think I'm ridiculously random.
I was on video chat with my best friend yesterday, and I just broke out in a song about ramen noodles......続く

前後の文脈が分かるように多少余分な文章も書きました。

よろしくお願いします。

Aベストアンサー

辞書で調べてみました。

リーダーズプラス
random - a.
[ハッカー]  予測できない、いろいろな、ろくなことをしない、とりとめのない、雑然とした、さして理由のない、わけもなくよくない

ランダムハウス英和大辞典
[米ハッカー俗] 順番のない、変則的な、まとまりのない
[米俗] 浅はかな、不真面目な、非生産的な、理由(いわれ)のない、つまらない
[米学生俗] 変な、変った、普通でない
(以上は形容詞の項目)

とあります。文脈がないので、どの訳語を選べばいいかわかりませんが、こういった俗語の意味だと思います。

Qfor(var i=0;...) の i の値を保持するには?

-----
<ul>
<li>test1</li>
<li>test2</li>
<li>test3</li>
</ul>

<script type='text/javascript'>
(function(){
var li = document.getElementsByTagName('li');

for(var i=0,max=li.length; i<max; i++){
li[i].onclick = function(){
alert(i);
};
}
})();
</script>
-----

上記スクリプトを実行すると、全てのli要素でクリックしたときに "3" がalertされます。
0,1,2 をそれぞれalertしたいのですが、どういった方法が考えられるでしょうか?

現在作成しているスクリプトでは、下記のようにidに値を保持しています。
もう少しスマートな方法がある気がするのですが…。

---
li[i].id = 'test' + i;
li[i].onclick = function(){
alert(this.id.replace(/^test(\d+)/, '$1'));
};
---

-----
<ul>
<li>test1</li>
<li>test2</li>
<li>test3</li>
</ul>

<script type='text/javascript'>
(function(){
var li = document.getElementsByTagName('li');

for(var i=0,max=li.length; i<max; i++){
li[i].onclick = function(){
alert(i);
};
}
})();
</script>
-----

上記スクリプトを実行すると、全てのli要素でクリックしたときに "3" がalertされます。
0,1,2 をそれぞれalertしたいのですが、どういった方法が考えられるでしょうか?

現在作成しているスクリプトでは、...続きを読む

Aベストアンサー

http://nanto.asablo.jp/blog/2005/12/04/165848
メモリーリークにみえて、そうでない・・・

>HTMLObjectに勝手にプロパティ
これはよくないことだじょ!そうおそわった。

ついでにいうと、いべんとをなんこもていぎするより
No3.みたいにおおもとにひとつでじゅうぶん。
innerHTMLで、ぜんたいをかきかえたとしてもOK!
と、TAGindex
http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi
でおそわったじょ!

Q[C#]2つのランダム文字列を作りたい

いつもありがとうございます。

2種類のランダム文字列を作りたいのですが、
なぜか同じ文字列が作成されるという現象が起こります。

以下の関数を用意して
public static string ランダム(int 桁数)
{
string[] codelist = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };

Random Random = new System.Random();

for (int i = 0; i < 桁数; i++)
{
randomcode += codelist[Random.Next(0, 36)];
}

return randomcode;

}

textBox1.Text = ランダム(10);
textBox2.Text = ランダム(10);

とやっても、同じランダムの文字列が入ってしまいます。

間に、
Thread.Sleep(100);

とか入れると変わるのですが・・・
理由がわかりません。

初心者的質問ですみませんがよろしくお願いします。

いつもありがとうございます。

2種類のランダム文字列を作りたいのですが、
なぜか同じ文字列が作成されるという現象が起こります。

以下の関数を用意して
public static string ランダム(int 桁数)
{
string[] codelist = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };

Random Random = new System.Random();
...続きを読む

Aベストアンサー

コンピュータで使われている乱数は、実際には「疑似乱数」と言って、一見バラバラで乱数と言ってもいい性質を持っていますが、実際には計算によって求められたものです。

それまでの値に、なんらかの計算をした結果を、「次の乱数」として使います。(Nextというメソッド名もそこに由来)
このとき、一番最初の状態になるものを「種(シード,seed)」と言います。
「前の状態から新しい乱数を計算する」ということから「種が同じなら、乱数列も同じになる」という性質があります。

バラバラにするための常套手段として、種に現在時刻から求めた値を使うことで、実行時刻が変化すれば値が変わるようにする、というのがあります。ただ、無限に細かい時刻をそのままコンピュータでは扱えないので、適当な単位(例えば、秒単位)になってしまい、単位時間以内(例えば、秒単位なら1秒以内)なら、同じ乱数列になってしまう、という問題があります。

Random.Random()のマニュアルを読むと
http://msdn.microsoft.com/ja-jp/library/h343ddh9%28v=vs.95%29.aspx
「既定のシード値はシステム時計から取得されるため、その分解能は有限です。 その結果、既定のコンストラクターを呼び出すことによって連続で作成される、異なる Random オブジェクトの既定のシード値は同一であるため、同一の乱数セットが生成されます。」
と、明記されています。

public static string ランダム(int 桁数) を2回呼び出していますが、その度に、Random Random = new System.Random();で新しい System.Randomオブジェクトを生成しています。
間にいくつかの処理が入っているとは言え、非常に短時間で終わるものなので、この「連続で作成される、異なる Random オブジェクト」となっている、と考えてよいでしょう。

対処法は、マニュアルにも書いてあります

コンピュータで使われている乱数は、実際には「疑似乱数」と言って、一見バラバラで乱数と言ってもいい性質を持っていますが、実際には計算によって求められたものです。

それまでの値に、なんらかの計算をした結果を、「次の乱数」として使います。(Nextというメソッド名もそこに由来)
このとき、一番最初の状態になるものを「種(シード,seed)」と言います。
「前の状態から新しい乱数を計算する」ということから「種が同じなら、乱数列も同じになる」という性質があります。

バラバラにするための常套手段とし...続きを読む

Qインスタンス生成で、○○.xxx();といった手法の意味

入門的に、インスタンスの作り方は、
AAA abc =new AAA();
なのですが、
VVV qqq = new ○○.xxx();
とこのような手法を用いた、方法があるようなのですが、意味がよくわかりませんので、サンプル、または、参考サイトを教えてください。

Aベストアンサー

1.
VVV v = new AAA().xxx();
これは AAA クラスのインスタンスを生成した後そのまま xxx というメソッドを呼んでいます。
AAA a = new AAA();
VVV v = a.xxx();
とおなじです。

2.
AAA.BBB v = new AAA.BBB();
こちらは入れ子クラスのインスタンス生成です。
AAA クラスの中にある BBB クラスのインスタンスを生成します。

本題ではありませんが、「手法」と「文法」はきっちり区別された方がよいかと思います。今回の質問は手法ではなく文法に関する質問ですね。


人気Q&Aランキング

おすすめ情報