Math.random在代码中没有正常工作

时间:2017-12-27 07:34:02

标签: java eclipse

package arrays;
import java.util.Scanner;

public class Raffle {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        System.out.println("Enter the number of partcipants ");
        int no=scan.nextInt();
        String participants[]=new String[no];
        System.out.println("Please enter their names and check out the random winner");
        for(int i=0;i<no;i++) {
            participants[i]=scan.next();
        }
        int rand=(int)Math.random()*no;
        System.out.println(rand);
        System.out.println("The winner of the raffle is "+participants[rand]);
    }
}

我使用Math.random()但我在运行期间看到0索引位置总是给出结果而不是随机值。有什么建议?我正在吸氧。

2 个答案:

答案 0 :(得分:7)

您将Math.random()的结果投放到int之前将其乘以no,结果为0,因为Math.random() < 1.0

更改

int rand=(int)Math.random()*no;

int rand=(int)(Math.random()*no);

答案 1 :(得分:1)

在0.0(包括)和1.0(不包括)之间投射双精度将始终向下舍入为零。 Math.random()值应首先与某个因子相乘,然后再将其转换为int,以获得介于零(包括)和乘法因子(不包括)之间的值。另一种可能的解决方案是使用java.util.Random。

的nextInt()方法