Java多线程 冰球比赛:每局限时20分钟

题目:冰球一场比赛一般分为3局,每局20分钟,中间休息15分钟。最终以射门得分多者为胜。请用Java多线程模拟中场休息结束下局开始的场景(注:为了更容易截图,可以缩短休息时间)。 

嗯嗯嗯~初学,下面是我对题目尽可能的理解,有很多不足,就比如打印的结果中总有些打印两次的,不太懂,如果大佬们有办法解决 还望告知一二 ʕ•ﻌ•ʔ 

import java.util.Random;

public class Runnable03 implements Runnable {
	static int i = 0;
	private int a_count = 1;// a队进球数量
	private int b_count = 1;// b队进球数量

	int sleep = 0; // 休眠时间
	private String team1; // a队名字
	private String team2;// b队名字
	Random ran = new Random();// 创造随机休眠时间
	Object b = new Object();

	public Runnable03(String team1, String team2) {// 传队名字参数
		this.team1 = team1;
		this.team2 = team2;
	}

	@Override
	public void run() {

		long start = System.currentTimeMillis();// 线程运行开始时间
		long end = 0;// 结束时间
		Object ob = new Object();
		boolean b = false;
		synchronized (ob) {
			System.out.println("第" + i + "局比赛开始\r\n-----------------------------");
			while (!b) {

				sleep = ran.nextInt(5); // 随机休眠时间
				try {
					Thread.sleep(sleep);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				end = System.currentTimeMillis();
				long i = 20 - end + start; // 剩余时间
				int n = a_count - b_count; // 比较各队进球数量
				b = win(i, n);// 如果有人胜利,提前结束程序
				if (b)
					break;
				System.out.println("还剩" + i + "分钟");
				if (Thread.currentThread().getName().equals(team1))
					System.out.println(Thread.currentThread().getName() + "------------->" + (a_count++) + "球");// a队进球,数量加一
				else
					System.out.println(Thread.currentThread().getName() + "--------------->" + (b_count++) + "球");// b队进球数量加一

			}
		}

	}

	public boolean win(long m, int n) {

		if (m <= 0) {// 比赛结束,比较两者进球数量确定胜利者

			if (n == 0)
				System.out.println("比赛结束!平局\t休息十分钟\t");
			else if (n > 0)
				System.out.println("胜利者:" + team1 + "\t休息十分钟\t");
			else
				System.out.println("胜利者:" + team2 + "\t休息十分钟\t");

			return true;
		}
		return false;
	}

	public static void main(String[] args) {
		;
		String team1 = "陌上花开";
		String team2 = "人如玉";
		Runnable03 runnable03 = new Runnable03(team1, team2);

		for (i = 1; i <= 3; i++) {

			new Thread(runnable03, team1).start();
			new Thread(runnable03, team2).start();

			try {
				Thread.sleep(1000);// 休息时间间隔
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}
}

 结果:

第1局比赛开始
-----------------------------
第1局比赛开始
-----------------------------
还剩20分钟
人如玉--------------->1球
还剩17分钟
陌上花开------------->1球
还剩14分钟
人如玉--------------->2球
还剩11分钟
陌上花开------------->2球
还剩9分钟
人如玉--------------->3球
还剩6分钟
陌上花开------------->3球
还剩4分钟
人如玉--------------->4球
还剩3分钟
陌上花开------------->4球
还剩2分钟
人如玉--------------->5球
胜利者:人如玉	休息十分钟	
胜利者:人如玉	休息十分钟	
第2局比赛开始
-----------------------------
第2局比赛开始
-----------------------------
还剩20分钟
人如玉--------------->6球
还剩15分钟
陌上花开------------->5球
还剩14分钟
还剩16分钟
人如玉--------------->7球
陌上花开------------->6球
还剩15分钟
人如玉--------------->8球
还剩11分钟
陌上花开------------->7球
还剩10分钟
人如玉--------------->9球
还剩8分钟
还剩6分钟
人如玉--------------->10球
陌上花开------------->8球
还剩8分钟
人如玉--------------->11球
还剩5分钟
陌上花开------------->9球
还剩4分钟
还剩5分钟
人如玉--------------->12球
陌上花开------------->10球
还剩2分钟
陌上花开------------->11球
胜利者:人如玉	休息十分钟	
胜利者:人如玉	休息十分钟	
第3局比赛开始
-----------------------------
第3局比赛开始
-----------------------------
还剩17分钟
人如玉--------------->13球
还剩17分钟
人如玉--------------->14球
还剩17分钟
人如玉--------------->15球
还剩14分钟
陌上花开------------->12球
还剩12分钟
人如玉--------------->16球
还剩10分钟
陌上花开------------->13球
还剩10分钟
人如玉--------------->17球
还剩10分钟
人如玉--------------->18球
还剩8分钟
人如玉--------------->19球
还剩8分钟
人如玉--------------->20球
还剩8分钟
人如玉--------------->21球
还剩5分钟
陌上花开------------->14球
还剩4分钟
人如玉--------------->22球
胜利者:人如玉	休息十分钟	
胜利者:人如玉	休息十分钟	

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值