我正在编写一个程序,其中使用名为generarAleatorio的函数计算随机数。

public static int generarAleatorio(int l){
        java.util.Random X = new java.util.Random();
        return X.nextInt(l) ;
    }


然后,我使用该数字在数组内部使用数组的长度作为generarAleatorio参数的参数来定位值

public static String generarFecha(){

int[] dias={1,2,3,4,5,6,7,8,9,10,
                    11,12,13,14,15,16,17,18,19,20,
                    21,22,23,24,25,26,27,28,29,30};

int[] mes={1,2,3,4,5,6,7,8,9,10,11,12};

return String.format("%d-%d",dias[generarAleatorio(dias.length)],
                             mes[generarAleatorio(generarAleatorio(mes.length))]);
}




问题是有时会显示如下所示的异常

Exception in thread "main" java.lang.IllegalArgumentException: bound must be positive
    at java.util.Random.nextInt(Random.java:388)
    at generadorregistros.GeneradorRegistros.generarAleatorio(GeneradorRegistros.java:70)
    at generadorregistros.GeneradorRegistros.generarFecha(GeneradorRegistros.java:108)
    at generadorregistros.GeneradorRegistros.main(GeneradorRegistros.java:48)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)


它告诉我,Bound im发送的不是正数,但据我所知,Array的长度始终相同且也是正数。

这是什么原因?数组的长度不总是正数吗?

最佳答案

数组的长度不总是正数吗?


这是你的情况。但是,有问题的调用不使用数组长度,而是使用随机数:

generarAleatorio( generarAleatorio(mes.length) )


此处,内部generarAleatorio(mes.length)可能返回0,在这种情况下,外部generarAleatorio(0)会失败。

如何解决问题取决于您要做什么。以下两项更改都将使错误消失-但是程序的行为将大不相同。

mes[generarAleatorio(generarAleatorio(mes.length)+1)]




mes[generarAleatorio(mes.length)]

09-07 07:32