头优先Java:目标随机数始终为零
我一直在尝试这段代码,使用math.random()生成的目标数总是为零。代码有问题吗?请帮忙。我试了很多次,但每次我试的目标随机数总是零头优先Java:目标随机数始终为零,java,Java,我一直在尝试这段代码,使用math.random()生成的目标数总是为零。代码有问题吗?请帮忙。我试了很多次,但每次我试的目标随机数总是零 public class Player { int number; public void guess() { number = (int) (Math.random()*10); } } public class GuessGame { Player p1; Player p2; Player p3;
public class Player {
int number;
public void guess()
{
number = (int) (Math.random()*10);
}
}
public class GuessGame {
Player p1;
Player p2;
Player p3;
public void startGame()
{
p1 = new Player();
p2 = new Player();
p3 = new Player();
int targetNumber;
targetNumber = (int) Math.random() * 10 ;
System.out.println("The target number is "+ targetNumber);
while(true)
{
p1.guess();
p2.guess();
p3.guess();
int guessp1 = p1.number;
int guessp2 = p2.number;
int guessp3 = p3.number;
System.out.println("Number guessed by player p1 is "+ guessp1);
System.out.println("Number guessed by player p2 is "+ guessp2);
System.out.println("Number guessed by player p3 is "+ guessp3);
boolean isp1 = false;
boolean isp2 = false;
boolean isp3 = false;
if(targetNumber==guessp1)
isp1 = true;
if(targetNumber==guessp2)
isp2 = true;
if(targetNumber==guessp3)
isp3 = true;
if(isp1||isp2||isp3)
{
System.out.println("player1 got it right? " + isp1);
System.out.println("player2 got it right? " + isp2);
System.out.println("player3 got it right? " + isp3);
System.out.println("Game Over!!!");
break;
}
else
{
System.out.println("All Wrong!! Play Again..");
}
}
}
}
public class GameLauncher {
public static void main(String[] args)
{
GuessGame game = new GuessGame();
game.startGame();
}
}
由于强制转换首先发生,使得指定表达式中的第一项等于0(因为Math.random返回的值小于0)。可以先用括号将数字相乘
targetNumber = (int) (Math.random() * 10) ;
或者简单地使用java.util.Random
中的nextInt
,因为强制转换首先发生,使得指定表达式中的第一项等于0(因为Math.Random返回的值<0)。可以先用括号将数字相乘
targetNumber = (int) (Math.random() * 10) ;
Random random = new Random();
number = random.nextInt(10);
或者简单地使用
java.util.Random
中的nextInt
,问题就在下面一行
targetNumber = (int) Math.random() * 10 ;
Random random = new Random();
number = random.nextInt(10);
Math.random()
返回0(包括)到1(不包括)之间的双精度值,然后将该值强制转换为int,使其在乘法之前变为零
使用
还是更好地利用
Random random = new Random();
number = random.nextInt(10);
问题在底线以下
targetNumber = (int) Math.random() * 10 ;
Math.random()
返回0(包括)到1(不包括)之间的双精度值,然后将该值强制转换为int,使其在乘法之前变为零
使用
还是更好地利用
Random random = new Random();
number = random.nextInt(10);
你应该写
targetNumber = (int) (Math.random()*10)
这是因为您正在执行的操作将Math.random()生成的数字转换为int作为零,然后乘以10
targetNumber = (int) (Math.random()*10)
这是因为您正在执行的操作将Math.random()生成的数字转换为int作为零,然后乘以10 返回带正号的双精度值,大于或等于0.0且小于1.0 将结果强制转换为int,int返回值的整数部分,因此为0 然后
1+0-1=0。
targetNumber = (int) (Math.random() * 10) ;
考虑使用Random
Random random = new Random();
number = random.nextInt(10);
您正在使用
Math.random()
哪个状态
返回带正号的双精度值,大于或等于0.0且小于1.0
将结果强制转换为int,int返回值的整数部分,因此为0
然后1+0-1=0。
targetNumber = (int) (Math.random() * 10) ;
考虑使用Random
Random random = new Random();
number = random.nextInt(10);
使用随机类生成随机数: 请尝试以下代码:
int targetNumber;
targetNumber = new Random().nextInt(100) ;
使用随机类生成随机数: 请尝试以下代码:
int targetNumber;
targetNumber = new Random().nextInt(100) ;
避免使用
Math.random
和乘法-使用new random()
和nextInt
。对整个应用程序使用一个Random
实例。避免使用Math.Random
和乘法-使用new Random()
和nextInt
。对整个应用程序使用一个Random
实例。