Java 随机数发生器公式
这里有点问题。想知道为什么我的ArrivalInerval方法的结果会得到“无穷大”。(tmp是在前一个类中定义的,我将粘贴这两个类)第一个类RandomNum工作正常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
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()