Java 随机数发生器公式

Java 随机数发生器公式,java,random,Java,Random,这里有点问题。想知道为什么我的ArrivalInerval方法的结果会得到“无穷大”。(tmp是在前一个类中定义的,我将粘贴这两个类)第一个类RandomNum工作正常 import java.util.Random; public class RandomNum { static double x = 0.1; static double y = 0.2; static double z = 0.3; static dou

这里有点问题。想知道为什么我的ArrivalInerval方法的结果会得到“无穷大”。(tmp是在前一个类中定义的,我将粘贴这两个类)第一个类RandomNum工作正常

import java.util.Random;

public class RandomNum {

        static double x = 0.1;
        static double y = 0.2;
        static double z  = 0.3; 
        static double lamda;                                  
        static double tmp;
        static double count1, count2, count3;
        static double average;          
        static Random randomNumbGen = new Random();

        // 3 methods for testing x, y, and z
        public static double ExpInterval(double lamda)

        {
        tmp=randomNumbGen.nextDouble();            
        return (-(1/lamda) * Math.log(tmp));
        }

        public static void main(String[] args) {
                   // TODO Auto-generated method stub
                    // loop that runs then methods then adds them to the count (for an an average later)     and prints out the results

for (int i=1; i<1001; i++)
count1+=ExpInterval(x);
System.out.println(ExpInterval(x));
count2+=ExpInterval(y);
System.out.println("                         " + ExpInterval(y));
count3+=ExpInterval(z);
System.out.println("                                                       " + ExpInterval(z));
}



//calculates average then prints it out
average = count1/1000;
System.out.println("The Average of the first variable is" + average +"  " + "1/lamba is " + 1/x);
average = count2/1000;
System.out.println("The average of the second variable is " + average + "   " + "1/lamba is " + 1/y);
average = count3/1000;
System.out.println("The average of the third variable is " +  average + "   " +  "1/lamba is " + 1/z);
}}
import java.util.Random;
公共类随机数{
静态双x=0.1;
静态双y=0.2;
静态双z=0.3;
静态双拉姆达;
静态双tmp;
静态双计数1、计数2、计数3;
静态双平均;
静态随机数numbGen=新随机数();
//测试x、y和z的3种方法
公共静态双扩展间隔(双lamda)
{
tmp=randomNumbGen.nextDouble();
返回(-(1/lamda)*数学日志(tmp));
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
//运行then方法的循环然后将它们添加到计数中(用于以后的平均值),并打印出结果

对于(int i=1;i您从未在第二个类中设置
tmp
,因为您从未调用
ExpInterval
,只调用
findArrivalInterval

此外,您还可以编写
intresult=(Math.random()*3)+1
,而不是使用
set
编写所有内容,并将所有if语句替换为

arrivalInterval = 0.1*result/tmp
System.out.println(arrivalInterval);
return arrivalInterval;

您从未在第二个类中设置
tmp
,因为您从未调用
ExpInterval
,只调用
findarrivalentval

此外,您还可以编写
intresult=(Math.random()*3)+1
,而不是使用
set
编写所有内容,并将所有if语句替换为

arrivalInterval = 0.1*result/tmp
System.out.println(arrivalInterval);
return arrivalInterval;

似乎
tmp==0f
;Java浮点除以零会产生
正无穷大
负无穷大
,具体取决于符号


之所以
tmp
0f
是因为您从未分配给它,所以它保留了默认的初始化值,即
0f
。请注意,您从未调用
ExpInterval
,因此确实
tmp
在您发布的代码中从未被修改过。

tmp==0f
;Java浮点除法-by-zero根据符号产生
正无穷大
负无穷大


之所以
tmp
0f
,是因为您从未分配给它,所以它保留了默认的初始化值,即
0f
。请注意,您从未调用
ExpInterval
,因此您发布的代码中确实从未修改
tmp

似乎
tmp==0
;Java浮点除零根据符号生成
正无穷大
负无穷大
。似乎
tmp==0
;Java浮点除零根据符号生成
正无穷大
负无穷大
。但这没关系,仍在学习该语言。感谢您对但是没关系,仍然在学习语言。谢谢你在数学方面的帮助。random()