Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的负界_Java_Arrays_Random - Fatal编程技术网

Java中的负界

Java中的负界,java,arrays,random,Java,Arrays,Random,我正在制作一个程序,使用名为generaleatorio的函数计算一个随机数 public static int generarAleatorio(int l){ java.util.Random X = new java.util.Random(); return X.nextInt(l) ; } 然后,我使用该数字在数组中定位一个值,使用数组的长度作为generaleatorio参数的参数 public static String generarFe

我正在制作一个程序,使用名为
generaleatorio
的函数计算一个随机数

public static int generarAleatorio(int l){
        java.util.Random X = new java.util.Random();
        return X.nextInt(l) ;
    }
然后,我使用该数字在数组中定位一个值,使用数组的长度作为
generaleatorio
参数的参数

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)
它告诉我,im发送的绑定不是正的,但据我所知,数组的长度总是相同的,也是正的

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

数组的长度不总是正的吗

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

generarAleatorio( generarAleatorio(mes.length) )
这里,内部
generaleatorio(mes.length)
可能返回
0
,在这种情况下,外部
generaleatorio(0)
失败

如何解决这个问题取决于你想做什么。以下两种更改都会使错误消失——但是程序的行为将非常不同

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


零不是一个正数(也不是负数),您正在将第一次调用nextInt的结果(可能是零)传递给下一次调用nextInt
mes[generarAleatorio(mes.length)]