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とかハードディスクなどはランダムアクセス系の記憶媒...続きを読む

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と、その...続きを読む

Qladies? women?

フィットネスクラブ内の個人用リラックスブースに、こちらは女性用、こちらは男性用、という風に表示をしたいのですが、"Ladies" "Gentlemen" もしくは、"Women" "Men"のどちらが適しているのか判断しかねています。 ニュアンスや使用目的の違いが分からなくて・・・。 どうか皆様、お知恵を拝借できればと、どうぞ宜しくお願いいたします。

Aベストアンサー

>"Ladies" "Gentlemen" もしくは、"Women" "Men"のどちらが適しているのか判断しかねています。

ladies、gentlemenは、「淑女」「紳士」という意味なので、御質問のような場合の表示として用いると、丁寧なあるいはお客を尊敬したような感じがします。日本語の表示の「女性用」「男性用」あるいは「御婦人」「殿方」に近い感じです。

women、menは、「女」「男」という意味なので、御質問のような場合の表示として用いると、単に間違えて入室しないように注意書きを掲示したという感じがします。日本語の表示の「女用」「男用」あるいは「女」「男」に近い感じです。

>使用目的の違いが分からなくて・・・。

使用目的による違いはありません。

どちらを用いるかはその施設の雰囲気、利用者の雰囲気、利用の形態などを考慮したうえで、質問者様の御選択になります。

なお、表示は、見やすさのために、通常大文字でLADIES、GENTLEMENのように示します。

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[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)」と言います。
「前の状態から新しい乱数を計算する」ということから「種が同じなら、乱数列も同じになる」という性質があります。

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

Qnew クラス名(Activity名.this);

Android

・下記のようなコードがあるのですが、このとき「.this」の意味を教えてください
・Activityクラス自身?
・「.」で繋いでいる意味も、「this」の意味も良く分かりません
・thisだけでは駄目?
・引数は1つ?

public class Hoge extends Activity {

 public class C1 {//インナークラス?

  protected m1method(略) {
  略 = new クラス名(Hoge.this);

Aベストアンサー

このソースはHogeクラスの中に新しくC1クラスを定義しているのでC1はHogeクラスの
インナークラスで間違いなく Hode.C1 と「.」でつないで表記します。

このときのHoge.thisとは、Hoge.C1クラスのオブジェクト自身のことです。例えば、
tmp = new Hoge.C1(); とした場合は tmp に該当します。

また、最後の行は、自分自身をパラメータとして「クラス名」のオブジェクトを生成
していますので、引数の数はそのクラスによります。

試してないので不確かですが、thisだけだとHogeクラスのオブジェクトと間違う
可能性がありますので、Hoge.thisのほうが確実です。

Q【au】待受画像がランダムで変わるアプリ

現在auのケータイを使っているのですが、
待ち受け画面がランダムで変わる、
(待受画像はデータフォルダに保存してあるもの)
というアプリを探しています。
Docomo用でこのような性能を持つアプリは見つけたのですが、
auではなかなか見つかりません。
もしご存知の方がいらっしゃいましたら教えてください。

ちなみに、わたしが見つけたDocomoのアプリは
satoo職人さんの「壁紙ランダム」というものです。

Aベストアンサー

No1の者です。

> わたしのはW32S(ソニエリ製)なので、搭載されていません(T_T)

W32SならばBREWなので、EZアプリカタログになければどうしようもないです。
Ezキー長押しでソニエリのサイトに行ってみて探してみましたか?(ない気もするけど(^^;))

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

QA a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

Aベストアンサー

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけても...続きを読む


人気Q&Aランキング