ページ 11

オープンアプリでのランダム関数

Posted: 2010年6月21日(月) 03:12
by kanade
C言語の質問でなくてすみません。

携帯用のオープンアプリを作っております。 ※Java
ランダム関数を使おうとしているのですがエラーが出てしまいます・・・。

if(mode == M_SHUFFLE) rand = (int)(Math.random() * 10 + 1);

この様な書き方では駄目なのでしょうか?
rand=10等と入れると問題なくコンパイルが通ります。

又、別の質問になってしまうのですがテキストエディタで修正して~と繰り返しております。
【Wireless Toolkit 2.5.2】
VisualStadioみたいな開発環境はないのでしょうか?

Re:オープンアプリでのランダム関数

Posted: 2010年6月21日(月) 04:01
by YuO
単に,WTK環境にはjava.lang.Math#randomが無いだけです。
WTKの下のdocs (もしかしたら私が別途ダウンロードして展開した可能性有り) のapi以下を見ても,
docs/api/midp/java/lang/Math.htmlには,
[フィールド]
・E
・PI
[メソッド]
・abs(double a)
・abs(float a)
・abs(int a)
・abs(long a)
・ceil(double a)
・cos(double a)
・floor(double a)
・max(double a, double b)
・max(float a, float b)
・max(int a, int b)
・max(long a, long b)
・min(double a, double b)
・min(float a, float b)
・min(int a, int b)
・min(long a, long b)
・sin(double a)
・sqrt(double a)
・tan(double a)
・toDegrees(double angrad)
・toRadians(double angdeg)
[java.lang.Objectからの継承メソッド]
・equals
・getClass
・hashCode
・notify
・notifyAll
・toString
・wait
のみが書かれています。

J2SEのソースから引っ張ってきてもよいのですが,結構大がかりになりそうなので,
適当な線形合同法なりの疑似乱数アルゴリズムを自分で描いた方が楽かもしれません。


> VisualStadioみたいな開発環境はないのでしょうか?

Javaと言えばまずはEclipse。
というわけで探してみると,作り方をメモしてくれている方がいました。
参考になればと思います。
SITE: Pleiades(Eclipse 3.5.2 Galileo)によるJ2ME開発環境構築メモ: 執事マウホフの手帳
http://rundog.txt-nifty.com/mau/2010/05 ... lipse.html

Re:オープンアプリでのランダム関数

Posted: 2010年6月21日(月) 11:46
by kanade
そうだったんですか・・・。
自分で似乱数アルゴリズムを作る・・・。
多分、無理ですwww

そうなると仕様を変えたほうがよいのでしょうか?
どうしてもrand関数を使いたいのですが・・・

Re:オープンアプリでのランダム関数

Posted: 2010年6月21日(月) 12:01
by へろりくしょん
別に車輪の再発明をしなくとも、疑似乱数のアルゴリズムなら、あっちこっちに転がってるので、
適当にチョイスすればいいだけじゃないですか?


「乱数 アルゴリズム」でグーグル先生に聞いたら、このサイトがトップにでました。
ライセンスがどうなっているのかは解りませんが、ソースものってます。


http://ayusya.hp.infoseek.co.jp/AlgorithmRandom.html

Re:オープンアプリでのランダム関数

Posted: 2010年6月21日(月) 12:13
by 天空橋
用途にもよりますが、乱数テーブルを使うのはどうでしょうか?

通常のJavaSEより、乱数を例えば、300個くらい出力して、それを基にstaticな配列として以下のように、定義します。

static final float[/url] RAND_TABLE = {166.59293f, 166.59293f, ...};

そして、上記の配列を参照していく、rand関数を作ってみると、擬似的にrand関数のようなものが作れるかと思います。

public static int randIndex = System.currentTimeMillis();
public static float random() {
return RAND_TABLE[(randIndex++) % RAND_TABLE.Length];
}

※ 上記ソースは今コンパイル出来る環境がないため、確認していません。

Re:オープンアプリでのランダム関数

Posted: 2010年6月21日(月) 13:54
by 天空橋
先ほど、乱数テーブルを利用すればどうでしょうか?と記載したのですが、
ちょっと調べてみたら、CLDC1.1に乱数を扱うクラスRandomクラスがあるようなので、そちらを利用すればよろしいのではないでしょうか?

http://java.sun.com/javame/reference/ap ... andom.html

なお、オープンアプリと記載しているところから、au用の携帯アプリを作成していると推察するのですが、
au用の携帯アプリの場合、CLDC1.1/MIDP2.0の仕様に基づいたアプリを利用できる旨が記載されています。

http://www.au.kddi.com/ezfactory/tec/sp ... appli.html

なので、CLDC1.1とMIDP2.0のAPIリファレンスを読むことをお勧めします。

Re:オープンアプリでのランダム関数

Posted: 2010年6月22日(火) 15:38
by kanade
回答ありがとうございます。

Randomクラスは使えるのでしょうか?
if(mode == M_SHUFFLE) rand = Random();
のようにしてみるとエラーが出てしまいます・・・。

どの様に使えば良いのかがわかりません・・・。

Re:オープンアプリでのランダム関数

Posted: 2010年6月22日(火) 16:07
by 天空橋
提示されたコードを見る限りでは、インスタンスの生成がされていないように見受けられます。
Randomは関数ではなく、クラスです。

もし、この言葉の意味がわからない場合は、アプリケーションを作るよりも先に、
Javaの基本を学んだほうがよろしいかと思います。