Java-蚂蚁爬杆(面向对象编程思想)

有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、18厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
要求:用类模拟出蚂蚁的行为特性,进而模拟出五只蚂蚁在木杆上的运行过程来编程求解。不能通过数学的方式直接用公式计算。

public class Ant {
   
    private int pos;//蚂蚁的位置,每种情况开始走之前要初始化位置
    private boolean isLeft=true;//默认左
    private boolean isDown=false;//在细杆上

    private static int num;//蚂蚁数目
    private static int numOfDown=0;//在线记录每种情况有多少只蚂蚁已经离开
    private static int LEFT_END=0;//标记细杆的左端位置
    private static int RIGHT_END=27;//标记细杆的右端位置
    private static int minTime=Integer.MAX_VALUE,maxTime,time;//标记最小最大时间,以及每种情况走的时间
    public Ant(int pos) {
  //构造函数
        this.pos = pos;
    }
    public void step(int i){
  //蚂蚁怎样走
        if(!isDown){
  //判断蚂蚁是否在杆上
            if(isLeft){
  //向左向右走并记录时间
                pos-=i;
            }else{
                pos+=i;
            }
            if(pos<=LEFT_END||pos>=RIGHT_END){
  //判断蚂蚁离开杆
                isDown=true;//标记已不在细杆上
                numOfDown++;//离开的蚂蚁数量加1
                if(numOfDown==num){
  //如故所有的蚂蚁离开
                    if(minTime>time){
                        minTime=time;//判断是不是最小时间
                    }
                    if(maxTime<time){
  //判断是不是最大时间
                        maxTime=time;
                    }
//                  System.out.println("all down........minTime:"+minTime+",maxTime:"+maxTime);//每种情况标记此种情况已走完,并输出时间
                }
            }
        }
    }
    public static void setNum(int num) {
  //设置蚂蚁总数
        Ant.num = num;
    }
    public int getPos() {
  //获得蚂蚁位置,是否碰头或者撞头
        return pos;
    }
    public void setPos(int pos) {
  //每种情况初始化蚂蚁的位置
        this.pos = pos;
    }
    public boolean isLeft() {
  //判断蚂蚁是否会碰头,撞头
        return isLeft;
    }
    public void setLeft(boolean isLeft) {
  //对于每种情况蚂蚁的走向的设置,对碰头和撞头的处理
        this.isLeft = isLeft;
    }
    public boolean isIsDown() {
  //判断蚂蚁在线不
        return isDown;
    }
    public void setIsDown(boolean isDown) {
  //每种情况初始化为在线
        this.isDown = isDown;
    }
    public static boolean isOver() {
  //判断蚂蚁是否全部离开细杆
        return numOfDown==num;
    }
    public static void setNumOfDown(int numOfDown) {
  //初始化离杆蚂蚁的数量
        Ant.numOfDown = numOfDown;
    }
    public static void setTime(int time) {
  //初始化每种情况的时间
        Ant.time = time;
    }
    public void turnAround(){
  //撞头或碰头时的转向
        isLeft=!isLeft;
    }
    public static int getMinTime() {
  //用于所有情况走完输出最大最小时间
        return minTime;
    }
    public static int getMaxTime() {
        return maxTime;
    }
    public static void timeGo(){
        time++;
    }
}
public class AntRun {
    public static void
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值