问题是这样:
1、创建两个线程
2、1-15正整数放入集合中(map,list)均可
3、分配两个线程取值范围(1-7/9-15)
4、两个线程按照打台球规则依次在集合中取值(最后取8)
5、判断是否某个线程取值结束
6、每次需要输出取值的状态
能否说明一下思路 谢谢~

解决方案 »

  1.   

    两个线程,轮到某一个打的时候,把对方线程睡了,慢慢打,取了集合里面还存在的(1-7) 或者(9-15)
    如果没有打8号球,然后用概率计算进不进?不进换人,进了继续上面操作。8号球进了,直接GAMEOVER。没进换人,把自己睡了,唤醒对方线程。同上操作。不知道算不算思路
      

  2.   

    import java.util.Vector;public class TestThread {
    public static void main(String[] args) {
    Vector<String> avector = new Vector<String>();
    avector.add("1");
    avector.add("2");
    avector.add("3");
    avector.add("4");
    avector.add("5");
    avector.add("6");
    avector.add("7");
    Vector<String> bvector = new Vector<String>();
    bvector.add("9");
    bvector.add("10");
    bvector.add("11");
    bvector.add("12");
    bvector.add("13");
    bvector.add("14");
    bvector.add("15");
    ThreadMain bThreadMain =new ThreadMain(avector,bvector);
    Thread thread = new Thread(bThreadMain);

    thread.start(); }

    }//线程
    import java.util.Random;
    import java.util.Vector;public class ThreadMain implements Runnable {
    //小号
    private Vector<String> avector;
        //大号
    private Vector<String> bvector;
    // 取什么号 a小号 b大号
    private String num = "a";
    //正在取球的
    private Vector<String> vector; public void run() {
    boolean flag = true;
    while (flag) {
    if(null==vector){
        //随机选择谁先开始
    if(whoStart()){
    vector = avector;num = "a";
    }else{
    vector = bvector;num = "b";
    }
    }
    //开始击球
    if (isSuccess()) {
    // 成功击球
    if(vector.size()==0){
     //已有人将球击完 击黑8
    if(isSuccess()){
    System.out.println(num+"击球黑8成功 取得胜利");
    flag = false;
    }else{
    // 换人击球
    changeMan();
    }
    }else{
    int qiu = new Random().nextInt(vector.size());
    System.out.println(num+"击球"+vector.get(qiu)+"成功");
    vector.remove(qiu);
    }
    } else {
    // 换人击球
    changeMan();
    }
    }
    }    public  void changeMan(){
    // 换人击球
    if(num.equals("a")){
    vector = bvector;num = "b";
    }else{
    vector = avector;num = "a";
    }
    }


    /**
     * 是否成功击球入袋 每次都有50%成功机会
     */
    public static boolean isSuccess() {
    int i = new Random().nextInt(2);
    if (i == 1) {
    return true;
    } else {
    return false;
    }
    } /**
     * 谁先
     */
    public static boolean whoStart() {
    int i = new Random().nextInt(2);
    if (i == 1) {
    return true;
    } else {
    return false;
    }
    }
    public ThreadMain(Vector<String> avector, Vector<String> bvector) {
    this.avector = avector;
    this.bvector = bvector;
    } public String getNum() {
    return num;
    } public void setNum(String num) {
    this.num = num;
    }}
      

  3.   


    import java.util.concurrent.ArrayBlockingQueue;public class TableBall
    {
    private static String winner = null; class Player extends Thread
    {
    private ArrayBlockingQueue<Integer> abq = new ArrayBlockingQueue<Integer>(
    8); private String name; private int ball; private boolean score = true; public void setScore(boolean score)
    {
    this.score = score;
    } private double scoreRate; public boolean initBall(int[] balls)
    {
    for (Integer ball : balls)
    {
    if (ball > 0 && ball < 16)
    {
    try
    {
    abq.put(ball);
    }
    catch (InterruptedException e)
    {
    return false;
    }
    }
    }
    return true;
    } Player(String name, double scoreRate)
    {
    this.name = name;
    this.scoreRate = scoreRate;
    } @Override
    public void run()
    {
    // 上局是否打进
    while (score)
    {
    // 取下个球
    try
    {
    ball = abq.take();
    }
    catch (InterruptedException e)
    {
    e.printStackTrace();
    } double rate = Math.random();
    if (rate <= scoreRate)
    {
    score = true;
    System.out.println("Player " + name + " kick in ball "
    + ball);
    }
    else
    {
    score = false;
    System.out.println("Player " + name + " miss ball " + ball);
    }
    if (score && abq.size() == 0 && winner == null)
    {
    winner = name;
    System.out.println(name + " wins!");
    break;
    }
    }
    }
    } public static void main(String[] args)
    {
    TableBall tb = new TableBall();
    Player p1 = tb.new Player("uery", 0.5);
    p1.initBall(new int[] { 1, 2, 3, 4, 5, 6, 7, 8 });
    Player p2 = tb.new Player("yan", 1);
    p2.initBall(new int[] { 9, 10, 11, 12, 13, 14, 15, 8 });
    while (winner == null)
    {
    p1.setScore(true);
    p1.run();
    if (winner == null)
    {
    p2.setScore(true);
    p2.run();
    }
    try
    {
    Thread.sleep(500);
    }
    catch (InterruptedException e)
    {
    e.printStackTrace();
    }
    }
    }}
    我也无聊写了一个,哈哈,挺好玩的...