こんにちは、初めてカキコしました。
私は新入社員で、実は言うと業務中なのですが、教育担当の方から
「アプレットで0~9までの数を、乱数を使って同じ数字がダブルことなく、連続で表示させてみて」(例0123456789、1234567890のような感じ)という指令が下ったのです。Javaを始めて2週間。『Javaプログラミング Brack Book』を資料にしていますが、詳しく書かれていないため?理解不足?な為に、さっぱりです。どなたか助けてください!!

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

A 回答 (2件)

連続しているとは、数値が1ずつ増えるように連続しているという意味なのですか?


(そんなかんたんなのでよいのかな。。。)

int random = rand.nextInt(9); でとりあえず、変数random に 0~9の乱数いずれかがはいりますね。

あとはループ制御文で、その値を元に1ずつ増やせば良いだけではないでしょうか?
(もちろん10をこえたら10引くとか0にもどすとかそういう処理は必要ですね)

あとは自分でやりなさい。やらないとあなた自身が将来困ります。
    • good
    • 0

不安なので一応言っておきますが、


下記のようにいきなり int random=rand...
などと書いてもエラーが出るだけですよ。

このまえに、randとは何かをちゃんと宣言しなければなりませんよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。一応c++をやっておりましたのでそんなことはいたしません。無事解決できました。

お礼日時:2001/05/07 13:22

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

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

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

Q一様乱数?疑似乱数?

0.0以上~1.0未満の範囲のdouble型一様乱数rdmを1000個発生させて、ヒストグラムをつくりたいのですが、このような書き方で良いのか、ご教示願えませんでしょうか。
ヒストグラムと言っても、グラフではなく、区間0≤u<0.1、0.1≤u<0.2、…、0.9≤u<1.0の10区間とし、配列aaに格納しているだけです。

また、「Math.random」を用いるやり方は理解できるのですが、下記のような書き方はいまいち納得できません。
疑問点1つ目、前者は毎回発生する乱数が違うのに、後者は同じですよね?なぜでしょうか。後者は毎回決まった値が出るので、初期値(seed)から決まった計算をしているということでしょうか。
疑問点2つ目、//kokoの次の行に x = rdm.nextDouble(); のように発生させた乱数を一時的に入れておかなくてもよいのでしょうか。

import java.util.*;

public class test {
public static void main(String [] args) {
int aa [] = new int [10];
long seed = 999L;
Random rdm = new Random();
rdm.setSeed(seed);
for(int i = 0; i < 1000; i++){
for(int j=1; j<=10; j++){//koko
if(rdm.nextDouble() < ((j-1)*0.1) && rdm.nextDouble() >= (j*0.1)) aa[j-1] = aa[j-1] + 1;
}
}
for(int i=0; i<10; i++){
System.out.println( aa[i] );
}
}
}

0.0以上~1.0未満の範囲のdouble型一様乱数rdmを1000個発生させて、ヒストグラムをつくりたいのですが、このような書き方で良いのか、ご教示願えませんでしょうか。
ヒストグラムと言っても、グラフではなく、区間0≤u<0.1、0.1≤u<0.2、…、0.9≤u<1.0の10区間とし、配列aaに格納しているだけです。

また、「Math.random」を用いるやり方は理解できるのですが、下記のような書き方はいまいち納得できません。
疑問点1つ目、前者は毎回発生する乱数が違うのに、後者は同じですよね?なぜでしょうか。後者は毎回決...続きを読む

Aベストアンサー

Java Runtime packageのソースはjdk: jdk-6u16-windows-i586.exe 等に含まれているので参照して確認してください。
jdk install directory top: src.zip 展開 ==>
src\java\util\Random.java

new Random() とした場合は seed value として System.nanoTime()を元に作成した値:毎回異なった値が使われます。

new Random(long seed), setSeed(long seed)とした場合はparameterとして与えられたseedに基づいた、固定シーケンスの欄数列が得られます。(現象の再現試験等に必要)

>for(int j=1; j<=10; j++){//koko
if(rdm.nextDouble() < ((j-1)*0.1) && rdm.nextDouble() >= (j*0.1))
aa[j-1] = aa[j-1] + 1;
}

この例は問題があります。
一つの乱数を得て、それに対するaa[j-1]をincrementすれば良いのに、
rdm.nextDouble()で毎回違った乱数を得ています。最小2回、最大20回求め、最悪if文を満足するものが得られない場合もあります。

int j;
double x;
......
for(int i = 0; i < 1000; i++){
x = nextDouble();
j = x*10.0;
aa[j]++;
}

以上のようにすれば良いと思います。



 

Java Runtime packageのソースはjdk: jdk-6u16-windows-i586.exe 等に含まれているので参照して確認してください。
jdk install directory top: src.zip 展開 ==>
src\java\util\Random.java

new Random() とした場合は seed value として System.nanoTime()を元に作成した値:毎回異なった値が使われます。

new Random(long seed), setSeed(long seed)とした場合はparameterとして与えられたseedに基づいた、固定シーケンスの欄数列が得られます。(現象の再現試験等に必要)

>for(int j=1; j<=10; j+...続きを読む

Qアプレットを実行すると、×が表示され、Javaアプレットの読み込みに失敗しました。のメッセージが表示されます。

Java JDK5をインストールしました。

C:\Program Files\Javaに
jdk1.5.0_06
jre1.5.0_06
がインストールされています。

コンパイルは、PATHにC:\Program Files\Java\jdk1.5.0_06\binを追加すれば、できるようになりました。


Javaアプレットの読み込みに失敗しました。のメッセージが表示されます。


// 図形の表示

import java.applet.*;
import java.awt.*;

public class Test_0002 extends Applet{
public void paint(Graphics g){
g.fillOval(0, 0, 200, 100);
}
}

Aベストアンサー

HTMLのソースとclassファイル(またはjarファイル)の配置はどうなっていますか?
読み込みに失敗したのなら、classファイルが読み込めていない可能性が高いです。

QJAVA 乱数で同じ数字を出さない方法

JAVAで乱数を使いたいのですが、同じ数を出さない方法が今一度
わかりません。
プログラムはサーブレットで記述しており、ブラウザで「数を出す」ボタンがおされたら、リクエストを受けたサーブレットは、一つ、1~10までの数を出し表示はJSPです。そしてまたボタンが押されたら、一つ、1~10までの数を出します。

以下に今のサーブレットに記述してあるプログラムの状態を書かせていただきますので、同じ数字を出さない方法が何かございましたら教えてください。宜しくお願いします。

long seed = System.currentTimeMillis(); //時間で乱数値をとる
Random r1=new Random(seed); //乱数ジェネレータを作成する
int i;
i = r1.nextInt(10)+1;//入力された命令回数をint型に変換し1から10までの数が出されiに入る。

Aベストアンサー

もちろんIteratorによる順次アクセスも可能です。
先ほどの例に続けると、下記の様になるでしょうか。

import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator; // 追加部分

class Test
{
public static void main(String [] args)
{
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0 ; i<10 ; i++)
{
list.add(i);
}
System.out.println(list);
Collections.shuffle(list , new Random());
System.out.println(list);
// 追加部分
Iterator<Integer> it = list.iterator();
while(it.hasNext())
{
System.out.print(it.next() + " ");
}
System.out.println();
}
}

もちろんIteratorによる順次アクセスも可能です。
先ほどの例に続けると、下記の様になるでしょうか。

import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator; // 追加部分

class Test
{
public static void main(String [] args)
{
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0 ; i<10 ; i++)
{
list.add(i);
}
System.out.println(list);
Collections.shuffle(list , new Random());
Syst...続きを読む

Qjava 乱数を並べて重複させない方法

javaのプログラミングについて質問させてください。
まだ勉強し始めの初級者です。

1~25までの乱数を発生させ
それらを重複させずに5列×5行に並べたいのですが、
Randomとfor文を使い乱数を発生させる事はできたのですが重複してしまいます。
ネットで調べたらArraylistのcontainsを使う等書いてあったのですが方法が分かりません。

5列×5行というのは
○、○、○、○、○、
○、○、○、○、○、
○、○、○、○、○、
○、○、○、○、○、
○、○、○、○、○、
という風に並べたいです。(○はすべて違う数字)

どなたか分かる方ご教授よろしくお願いします。

Aベストアンサー

簡単なのは #2 さんの方法で、
例えば、こんな感じでしょうか。
http://melpon.org/wandbox/permlink/ou1SnFSMRwu6B6Tt
出力例:
shuffled: [12, 1, 22, 9, 17, 23, 20, 24, 2, 14, 11, 25, 6, 18, 5, 15, 4, 3, 10, 13, 21, 16, 19, 8, 7]
12 1 22 9 17
23 20 24 2 14
11 25 6 18 5
15 4 3 10 13
21 16 19 8 7

Qjava プログラム 範囲を指定した乱数

正規乱数をボックスミューらー法で発生させて、
範囲を指定して出力したいと思ってます。
プログラムを作成してみたのですが・・・
平均50で範囲を48から52にしたいのですが
たまに範囲外というか「0.0」が出力されてしまいます。
アドバイスをください

import java.util.*;
public class test2{
public static void main(String args[]){
double R,S;
double r[]=new double[200];
 double s[]=new double[200];
double s1[]=new double[200];

Random ran=new Random();
   for(int i=0;i<200;i++){
    R=ran.nextDouble();
S=50+Math.sqrt(-2*Math.log(ran.nextDouble()))*Math.cos(2*Math.PI*(ran.nextDouble()));
r[i]=R;

s1[i]=S;

if(50-2<s1[i]){
if(50+2>s1[i]){

s[i]=s1[i];



}
}
}



for(int j=0;j<150;j++){

System.out.println(s[j]);

}
}
}

お願いします

正規乱数をボックスミューらー法で発生させて、
範囲を指定して出力したいと思ってます。
プログラムを作成してみたのですが・・・
平均50で範囲を48から52にしたいのですが
たまに範囲外というか「0.0」が出力されてしまいます。
アドバイスをください

import java.util.*;
public class test2{
public static void main(String args[]){
double R,S;
double r[]=new double[200];
 double s[]=new double[200];
double s1[]=new double[200];

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

Aベストアンサー

これは
if(50-2<s1[i]){
if(50+2>s1[i]){
のため48.0<s1[i]<52.0以外例えば
47.8や52.3のときはs[i]に0.0が代入
されているのですね。
なのでそれ以外のときは何を代入するかですが

単純に考えてその場合は出力しなければよいの
ですから
for(int j=0;j<150;j++){
if(s[j]!=0.0){//0でなければprintする。

System.out.println(s[j]);
}
}


人気Q&Aランキング

おすすめ情報