如题,代码实现:
import java.util.Scanner;
public class text1 {
public static void main(String[] args){
System.out.println("请输入一个整数n,使1<=n<=7");
Scanner n=new Scanner(System.in);
int lim=n.nextInt();
int f=0;
double an=Math.pow(10,lim);
double con;
double aus;
for(int i=0;i<an;i++){
double a=Math.random();
double b=Math.random();
if((1-a-b)<0) {
i--;
continue;
}
if((a+b)>=0.5&&a<=0.5&&b<=0.5)//(a+b>=1-a-b&&a+1-a-b>=b&&b+1-a-b>=a)
f= f+1;}
con=f;
aus=con/an;
System.out.println("一根棒子任意折成三段可以构成三角形的概率是:"+aus);
}
}
多次尝试可以看出,符合大数定理,n越大,越接近0.25.
知识补充:
1.Scanner接受外界输入转成字符,而字符不能进行运算。故要用int lim=n.nextInt();再次转换成整型。
以下内容摘自https://blog.csdn.net/wo_shi_LTB/article/details/78803676
2.从外界接收数据除了Scanner外还可以用main中的args导入,即直接 for(int i=0;i<args.length;i++), 再右键代码,选择 运行方式—>运行配置—>在自变量中输入args值。
3.要设定第三条边小于零时i--并且重来这种情况。
待解决问题:
原错误代码:
第15行无法将f值传输到con中,需要拆分 con=f; aus=con/(10*lim);才可。