如何在方法中创建数组来打印用户所需的随机数?

时间:2016-11-29 23:49:45

标签: java arrays

我编写了代码来创建用户所需的数组和大小,但没有显示任何随机数。

public class ArrayStats {
    public static void fillRandomArray(int [] a, int max) {
        int [] randomArray = new int[max];
        for (int i=0; i < randomArray.length; i++){
            randomArray[i] = (int)(Math.random());
        }
    }
}

3 个答案:

答案 0 :(得分:0)

问题是Math.random()返回一个从0.0到1.0的Double值 0.1到int = 0,....... 0.5到int = 0。 如果您需要生成随机数,请尝试:

    public static int randomNumber(int min, int max) {

            Random rand = new Random();
            int num = rand.nextInt(max - min + 1) + min;
            return num;

        }

 public static void fillRandomArray(int [] a, int max) {
        int [] randomArray = new int[max];
        for (int i=0; i < randomArray.length; i++){

            //Example Generate random number between 1 and 9
            randomArray[i] = randomNumber(1,9);
        }

    }

答案 1 :(得分:0)

这是对您的代码的一个微小修改,它将使用从0到Integer.MAX_VALUE的随机整数填充您的数组:

public class ArrayStats {
    public static void fillRandomArray(int [] a, int max) {
        int [] randomArray = new int[max];
        for (int i=0; i < randomArray.length; i++){
            randomArray[i] = (int)(Math.random() * Integer.MAX_VALUE);
        }
    }
}

这里的事情是Math.random()返回0到1范围内的双精度值。当你将它强制转换为(int)时,它总是变为0。

或者,您可以查看课程Random

答案 2 :(得分:0)

随机值未被存储,因为函数Math.random()生成的值介于0.0(含)和1.0(不包括)之间,因此,转换为int将始终返回0.来自官方文档:

  

返回带有正号的double值,大于或等于   0.0且小于1.0。返回值是伪随机选择的,具有来自该范围的(近似)均匀分布。

Math.random()结果乘以某个固定的整数值并转换为int或使用Random实例的方法random.nextInt()作为:

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

Random r = new Random();
int rand = r.nextInt();

由于this post中解释的原因,建议采用后一种方法。

因此,您的代码变为:

public class ArrayStats {
    public static void fillRandomArray(int [] a, int max) {
        int [] randomArray = new int[max];
        Random r = new Random();
        for (int i=0; i < randomArray.length; i++){
            randomArray[i] = r.nextInt();
        }
    }
}