我正在编写一个程序,其中使用名为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)]