头优先Java:目标随机数始终为零

头优先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;

我一直在尝试这段代码,使用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 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
实例。