JAVA入门之龟兔鸡赛跑实例

场景如下。兔子、乌龟和公鸡进行赛跑,其中兔子每秒0.5米的速度,每跑2米休息10秒;乌龟每秒跑0.1米,不休息;公鸡每秒0.8米,每跑3秒需要吃一条虫子,耗时0.6秒。 当其中一个跑到终点后其他动物个不跑了;比赛道路长20米。试用多模拟该比赛过程

animal .java

package com.test44;

public class animal extends  Thread{
     
    protected double speed; //速度
    public static double length=20;               //道路总长
    private  String animalName;

    public double getSpeed() {
     
        return speed;
    }

    public void setSpeed(double speed) {
     
        this.speed = speed;
    }

    public static double getLength() {
     
        return length;
    }

    public static void setLength(double length) {
     
        animal.length = length;
    }

    public String getAnimalName() {
     
        return animalName;
    }

    public void setAnimalName(String animalName) {
     
        this.animalName = animalName;
    }

    public animal(String animalName) {
     
        super(animalName);


    }
}

Chick .java

package com.test44;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Chick extends animal {
     
    private Rabbit rabbit;
    private Wugui wugui;

    private  Integer time=0;//用来计时
    public Rabbit getRabbit() {
     
        return rabbit;
    }

    public void setRabbit(Rabbit rabbit) {
     
        this.rabbit = rabbit;
    }

    public Wugui getWugui() {
     
        return wugui;
    }

    public void setWugui(Wugui wugui) {
     
        this.wugui = wugui;
    }

    public Chick(String animalName,double speed) {
     
        super(animalName);
        this.speed=speed;
    }


    public void run() {
     
        for (double i = 0; i <this.length ; i+=speed) {
     
            try {
     
                Thread.sleep(1000);
            } catch (InterruptedException e) {
     
                e.printStackTrace();
            }

            System.out.println(this.getName()+"跑了"+(new BigDecimal(i+this.speed)).setScale(2, RoundingMode.HALF_UP)+"米");
            time++;//跑完一秒计时加一
            if(time%3==0&&time!=0){
     
                try {
     
                    System.out.println(this.getName()+"正在吃虫子,耗时0.6s");
                    Thread.sleep(600);
                } catch (InterruptedException e) {
     
                    e.printStackTrace();
                }
            }
        }
        System.out.println(this.getName()+"是冠军");
        //率先跑完循环的就是冠军
        if(rabbit.isAlive()){
     
            rabbit.stop();;
        }
        if(wugui.isAlive()){
     
            wugui.stop();
        }
    }
}

Rabbit .java

package com.test44;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Rabbit extends animal {
     

    private Chick chick;
    private Wugui wugui;

    public Chick getChick() {
     
        return chick;
    }

    public void setChick(Chick chick) {
     
        this.chick = chick;
    }

    public Wugui getWugui() {
     
        return wugui;
    }

    public void setWugui(Wugui wugui) {
     
        this.wugui = wugui;
    }

    public Rabbit(String animalName,double speed) {
     
        super(animalName);
        this.speed=speed;

    }

    @Override
    public void run() {
     
        for (double i = 0; i <this.length ; i+=speed) {
     
            try {
     
                Thread.sleep(1000);
            } catch (InterruptedException e) {
     
                e.printStackTrace();
            }
            System.out.println(this.getName()+"跑了"+(new BigDecimal(i+this.speed)).setScale(2, RoundingMode.HALF_UP)+"米");

            if(i!=0&&(i+this.speed)%2==0){
     
                try {
     
                    System.out.println(this.getName()+"正在睡觉,需要10s");
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
     
                    e.printStackTrace();
                }
            }
        }
        System.out.println(this.getName()+"是冠军");
        //率先跑完循环的就是冠军
        if(chick.isAlive()){
     
            chick.stop();;
        }
        if(wugui.isAlive()){
     
            wugui.stop();
        }
    }
}

Wugui .java

package com.test44;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Wugui extends animal{
     
    private  Rabbit rabbit;
    private  Chick chick;

    public Wugui(String animalName,double speed) {
     
        super(animalName);
        this.speed=speed;
    }

    public Rabbit getRabbit() {
     
        return rabbit;
    }

    public void setRabbit(Rabbit rabbit) {
     
        this.rabbit = rabbit;
    }

    public Chick getChick() {
     
        return chick;
    }

    public void setChick(Chick chick) {
     
        this.chick = chick;
    }

    public void run() {
     
        for (double i = 0; i <this.length ; i+=speed) {
     
            try {
     
                Thread.sleep(1000);
            } catch (InterruptedException e) {
     
                e.printStackTrace();
            }
            System.out.println(this.getName()+"跑了"+(new BigDecimal(i+this.speed)).setScale(2, RoundingMode.HALF_UP)+"米");

        }
        System.out.println(this.getName()+"是冠军");

        //率先跑完循环的就是冠军
        if(chick.isAlive()){
     
            chick.stop();;
        }
        if(rabbit.isAlive()){
     
            rabbit.stop();
        }
    }
}

Test .java

package com.test44;

public class Test {
     
    public static void main(String[] args) {
     
        Wugui wugui = new Wugui("乌龟", 0.1);
        Rabbit rabbit = new Rabbit("兔子", 0.5);
        Chick chick = new Chick("小鸡", 0.8);


        wugui.setChick(chick);
        wugui.setRabbit(rabbit);

        rabbit.setChick(chick);
        rabbit.setWugui(wugui);

        chick.setRabbit(rabbit);
        chick.setWugui(wugui);
        wugui.start();
        rabbit.start();
        chick.start();
    }
}

你可能感兴趣的:(Java基础,多线程)