Java-线程课后作业练习题2

编写一个Java程序,该程序将启动4个线程,其中3个是掷硬币线程,1个是主线程。每个掷硬币线程将连续掷出若干次硬币(10次以内,次数随机生成);主线程将打印出正面出现的总次数以及正面出现的概率。注意:因为要计算数量以及出现概率,所以必须将所有子线程内的数据同步到主线程内。

package Ch04HomeWork;


public class CoinTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int PositiveNum = 0;//正面次数
		int totalNum = 0;//总次数
		
		//创建三个子线程
		Coin[] coins = new Coin[3];
		for(int i=0;i<3;i++) {
			coins[i] = new Coin();
		}
		Thread t1 = new Thread(coins[0]);
		Thread t2 = new Thread(coins[1]);
		Thread t3 = new Thread(coins[2]);

		t1.start();
		t2.start();
		t3.start();
		
		//主线程等待子线程执行完毕再统计硬币数
		try {
			t1.join();
			t2.join();
			t3.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//赋值
		for(int i=0;i<3;i++) {
			PositiveNum += coins[i].getPositiveNum();
			totalNum += coins[i].getNum();
		}
		
		//保留两位小数
		double number = (double)PositiveNum/(double)totalNum;//求正面概率
		System.out.println("掷硬币总次数:"+totalNum+"次,  正面出现的总次数是:"+PositiveNum+
				"次,  正面出现的概率是:"+String.format("%.2f",number));
	}

}

class Coin implements Runnable{
	private int num = 0; //掷硬币次数
	private int positiveNum = 0; //正面次数
	
	public void run() {
		//连续掷出若随机次硬币
		num = (int) (Math.random() * 10 + 1);
		//模拟掷硬币
		for(int i = 0;i < this.num;i++) {
			
				int result = (int)(Math.random()*10)>5?1:0;
				if(result == 1){//抛到正面
					this.positiveNum ++;
				}
		}
		
	}

	public int getNum() {
		return num;
	}

	public int getPositiveNum() {
		return positiveNum;
	}
	
}

这段代码实现了一个掷硬币模拟程序,通过多线程来模拟多次掷硬币的过程,并统计正面出现的概率。

  1. CoinTest 类的 main 方法中,创建了三个 Coin 实例,分别用于模拟三次独立的掷硬币过程。

  2. 创建三个线程 t1t2t3,分别用于执行这三个 Coin 实例的任务。

  3. 启动三个线程。

  4. 使用 t1.join()t2.join()t3.join() 让主线程等待这三个子线程执行完毕,然后再统计结果。

  5. 创建了一个 Coin 类实现了 Runnable 接口,用于模拟掷硬币的线程任务。

  6. Coin 类中有 num(掷硬币次数)和 positiveNum(正面次数)两个成员变量。

  7. run 方法中,先随机生成一个掷硬币次数 num(范围是 1 到 10)。

  8. 使用循环模拟实际的掷硬币过程,随机生成一个结果,如果结果大于 5,则认为是正面。

  9. 如果结果为正面,增加 positiveNum 计数。

  10. CoinTest 的主方法中,使用循环遍历每个 Coin 实例,获取其 numpositiveNum 值,用于统计总的掷硬币次数和正面出现的总次数。

  11. 计算正面出现的概率,使用 (double)PositiveNum / (double)totalNum,并使用 String.format("%.2f", number) 来保留两位小数打印出来。

总体来说,这段代码通过多线程模拟了多次掷硬币的过程,并统计了正面出现的概率。每个子线程随机生成掷硬币次数,然后根据随机结果统计正面出现的次数。最终主线程等待所有子线程完成任务,然后计算概率并打印结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Ale-阿乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值