プロが教えるわが家の防犯対策術!

JSPから下記のクラスファイルを呼び出し、戻り値を返すように作りたいのですがうまくいきません。
1.Math.floor(Math.random()*100)-50
上記で実行しても小数点以下がでてしまいます。
出ないようにするのは無理なのでしょうか?

2.乱数はdouble型以外だめなのでしょうか?
コンパイルするとdouble型なので間接参照できません。というようなエラーが出てしまいます。
これは結果を文字型に変更して戻り値として返したいのですができません。

どうすれば理想どおりにできるようになりますか?


public String getR(){

 double rnd = Math.floor(Math.random()*100)-50;
 if(rnd.length = 4){
  rnd = rnd.substring(0,2) ;
 }
 else{
  rnd = rnd.substring(0,3) ;
 }
 _R = rmd;
 return _R;
}

A 回答 (3件)

#1の補足にで書かれていたコードを、少しいじってみたのですが、


以下のような形で目的通りにはなりませんでしょうか?
(-50~50の整数が、String型に変換されて戻るはずだと思います。)

間接参照できませんというのは、
「if(rnd.length = 4)」で発生したのではないかと思いました。
私はJSPは使わないので、自信はありません。

public String getR(){
String _R;
int max = 50 ;
int min = -50 ;
int rnd = (int)((Math.random() * (max - min + 1)) + min) ;

_R = Integer.toString(rnd);
if(_R.length() == 4){
_R = _R.substring(0,2);
}
return _R;
}
    • good
    • 0
この回答へのお礼

こんにちは。
できました!!
ありがとうございます。
_R に先に代入してそれを使うようにすればいいんですね。
また、それによってランダム変数の(int)が効くようになり小数点以下が出ないようになりました。

これはJSPではなくjavaのクラスファイルなのですがJSPからこれを呼び出したかったのです。
ほんとにありがとうございました。

お礼日時:2004/05/18 14:15

Math.random()は0~1の間の値を返します。


開発者は自分のほしい範囲にするために定数をかけて
実際のランダム値として使用します。

例:0~100までのランダムだと100をかける。

doubleで帰ってくるのは開発者が求めるランダム値の
範囲がわからないため汎用的にするためdoubleに
なっていると思います。
(小数点以下がいらない場合は切り捨ててしまえば
上位の桁だけでも数が大きければ範囲内での
ランダム値となります)

この回答への補足

ありがとうございます。
私も小数点以下を切り捨てればいいと思い、(int)やMath.floorを使ってもみましたがだめでした。

補足日時:2004/05/18 10:45
    • good
    • 0

今、手元にJDKをインストールしたPCがないので試してないですが、


1.
rndがdoubleなので、単にintでキャストしてやれば良いのでは?

2.キャストしたintをIntegerクラスに入れてやって、toString()で良いような。

細かいJavaの文法はイマイチ覚えていないのであやふやですが、多分いけると思います。
(手元にJava API JavaDocを置いておくべきですね。(^^;)

この回答への補足

ありがとうございます。
下記のようにしてやってみましたが、コンパイルの時点でint型は間接参照できませんとなってしまいました。

public String getR(){

 int max = 50 ;
 int min = -50 ;
 int rnd = (int)((Math.random() * (max - min + 1)) + min) ;

 if(rnd.length = 4){
  rnd = rnd.substring(0,2);
  _R = rnd.toString();
 }
 else{
  _R = rnd.substring(0,3);
  _R = rnd.toString();
 }
 _R = "+" + _R ;
 return _R;
}

補足日時:2004/05/18 10:57
    • good
    • 0

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