0

2つの数値の間にある必要がある乱数を返そうとしています。これを行う方法は、ループを設定して、それらの数値の間にあるかどうかを確認することです。そうでない場合は、再ロールします。

私が抱えている問題は、ループから抜け出せず、解決できないことです。これは、変数がループから渡されて再テストされないためですか?

もしそうなら、それは私がする必要があるある種の復帰または休憩ですか?

コード:

int randDamRange = 0
byte DamRange = attack.getM_damageRange(); //In this case 75

//Create a random number from within the attack damage range
do
{
    Random randbetween = new Random();

    randDamRange = randbetween.nextInt(DamRange);
    randDamRange = 75; //Test Should breakout of loop           
}   
while ((randDamRange < DamMin) || (randDamRange < DamMax));
4

3 に答える 3

3

ループ状態を見てください:

while ((randDamRange < 50) || (randDamRange < 115));

さてrandDamRange、75歳になることを考えてみてください。なぜそれが続くとは思わないのですか?75は115未満です。

50は115未満であるため、ループ条件は次とまったく同じであることに注意してください。

while (randDamRange < 115);

私はあなたが意味したと思う:

while (randDamRange < 50 || randDamRange > 115)

しかし、そうであれば、範囲内の乱数を取得して50を追加する方がはるかに[0, 65]簡単です...ループする必要はまったくありません。getM_damageRange()(どうやって物事が始まるのかは明らかではありません。)

于 2012-12-23T22:14:28.513 に答える
2

50から115の間の乱数を取得するためのより簡単な解決策は、0から65の間の乱数を取得し、50を追加することです。

Random randbetween = new Random();
randDamRange = randbetween.nextInt(65);
randDamRange += 50;
于 2012-12-23T22:15:09.850 に答える
0

あなたの場合、これを行う最も簡単な方法は次のとおりです。

int randomNumber = (int)(Math.random() * 76)

一般的な方法は次のとおりです。

int randomNumber = minimalValue + (int)(Math.random() * ((maximalValue - minimalValue) + 1))
于 2012-12-24T01:40:45.090 に答える