xm100501 2020-10-21 21:01 采纳率: 0%
浏览 328

求代码java 哪位大神江湖救急啊 拜托了

设计一个子弹类 Bullet, 类中含有int型成员变量子弹编号(id)。
设计一个弹匣类 Magazine,包含如下两个成员方法

  1. Boolean pushBullet( Bullet b):如果将一发子弹成功压入弹匣中,则返回true;如果弹匣已满(弹匣至多可以装入6发子弹),则打印提示信息,并返回false
  2. Boolean popBullet(如果将一发子弹成功从弹匣弹出,则返回true;如果弹匣已空,则打印提示信息。并返回false。

设计一个手枪类Pistol,包含一个成员变量弹匣( magazine) 和两个成员方法

  1. Boolean shoot()如果成功将弹匣顶部的子弹id打印输出,并将该子弹从弹匣弹出,则返回true。如果弹匣为空,则打印提示信息,并返回 false
    1. void setMagazine( Magazine m):将给定的弹匣安装到手枪上,即将手枪的成员变量magazine具体指定为参数里所给的弹匣对象m

在main方法中创建两个弹匣对象,并都将它们压满子弹。
创建一个手枪对象,先将第一个弹匣装入手枪,并将弹匣中子弹打空,然后装入第二个弹匣,也将子弹打空。
要求弹匣类 Magazine的实现必须采用链表结构
画出程序的UML图

  • 写回答

1条回答 默认 最新

  • _YuLF 2020-10-22 11:17
    关注

    使用到了单向链表

    子弹类

    public class Bullet {
    
        //创建时,需要一个编号
        public Bullet(int bulletId){
            this.bulletId = bulletId;
        }
    
        private Integer bulletId;//子弹ID
        public Bullet nextBullet;//下一个子弹索引地址  单链表的方式
    
        @Override
        public String toString() {
            return "Bullet{" +
                    "子弹ID=" + bulletId +
                    '}';
        }
    }
    

    弹夹类

    public class Magazine {
    
        private String magazineName;
        public Magazine(String name){
            this.magazineName = name;
        }
    
        //先创建一个头节点不能动  作为顶点标识
        private Bullet headNode = new Bullet(0);
    
        //如果将一发子弹成功压入弹匣中,则返回true;如果弹匣已满(弹匣至多可以装入6发子弹),则打印提示信息,并返回false
        public Boolean pushBullet(Bullet b){
            int magazineBulletSize = getMagazineBulletSize(headNode);
            if(magazineBulletSize>=6){
                System.out.println(this.magazineName+"弹夹已经满了!");
                return false;
            }
            Bullet tmpNode = this.headNode;
            //找到最后一个链表节点
            while (true) {
                if (tmpNode.nextBullet == null) {
                    break;
                }
                tmpNode = tmpNode.nextBullet;
            }
            //此时tmpNode指向的是最后一个空节点 添加
            tmpNode.nextBullet = b;
            System.out.println(this.magazineName+"添加弹夹子弹:"+b);
            return true;
        }
    
        //获取当前弹夹子弹size
        public int getMagazineBulletSize(Bullet bullet){
            int bulletSize = 0;
            Bullet bullet1 = bullet.nextBullet;
            while(bullet1 != null){
                bulletSize++;
                bullet1 = bullet1.nextBullet;
            }
            return bulletSize;
        }
    
    
        //如果将一发子弹成功从弹匣弹出,则返回true;如果弹匣已空,则打印提示信息。并返回false
        public  Boolean popBullet(){
            Bullet tmpNode = headNode;
            if(tmpNode.nextBullet ==null){
                System.out.println(this.magazineName+"子弹被打空了");
                return false;
            }
            //弹出
            System.out.println(this.magazineName+"射出子弹. ID="+tmpNode.nextBullet);
            //转轮 下一个 往上移一位
            tmpNode.nextBullet = tmpNode.nextBullet.nextBullet;
            return true;
        }
    
    }
    

    手枪类

    public class Pistol {
    
        private Magazine magazine;
    
        //将给定的弹匣安装到手枪上,
        public void setMagazine(Magazine m) {
            this.magazine = m;
        }
    
        //如果成功将弹匣顶部的子弹id打印输出,并将该子弹从弹匣弹出,则返回true。如果弹匣为空,则打印提示信息,并返回 false
        public Boolean shoot() {
            if (magazine == null) {
                System.out.println("弹夹没有安装!");
            }
            return magazine.popBullet();
        }
    
    }
    

    Main方法

    public class TestMain {
        public static void main(String[] args) {
            //创建两个弹匣对象,并都将它们压满子弹。
            Magazine magazine1 = new Magazine("弹夹1");
            Magazine magazine2 = new Magazine("弹夹2");
            for(int i =1;i<7;i++){
                magazine1.pushBullet(new Bullet(i));
                magazine2.pushBullet(new Bullet(i));
            }
            //创建一个手枪对象
            Pistol pistol = new Pistol();
            //先将第一个弹匣装入手枪
            pistol.setMagazine(magazine1);
            //并将弹匣中子弹打空,
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            //然后装入第二个弹匣,
            pistol.setMagazine(magazine2);
            //也将子弹打空。
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
            pistol.shoot();
        }
        //添加子弹的逻辑我就不测试了,UML类图我只在eclipse画过,idea没有测试过
    }
    

    输出

    弹夹1添加弹夹子弹:Bullet{子弹ID=1}
    弹夹2添加弹夹子弹:Bullet{子弹ID=1}
    弹夹1添加弹夹子弹:Bullet{子弹ID=2}
    弹夹2添加弹夹子弹:Bullet{子弹ID=2}
    弹夹1添加弹夹子弹:Bullet{子弹ID=3}
    弹夹2添加弹夹子弹:Bullet{子弹ID=3}
    弹夹1添加弹夹子弹:Bullet{子弹ID=4}
    弹夹2添加弹夹子弹:Bullet{子弹ID=4}
    弹夹1添加弹夹子弹:Bullet{子弹ID=5}
    弹夹2添加弹夹子弹:Bullet{子弹ID=5}
    弹夹1添加弹夹子弹:Bullet{子弹ID=6}
    弹夹2添加弹夹子弹:Bullet{子弹ID=6}
    弹夹1射出子弹. ID=Bullet{子弹ID=1}
    弹夹1射出子弹. ID=Bullet{子弹ID=2}
    弹夹1射出子弹. ID=Bullet{子弹ID=3}
    弹夹1射出子弹. ID=Bullet{子弹ID=4}
    弹夹1射出子弹. ID=Bullet{子弹ID=5}
    弹夹1射出子弹. ID=Bullet{子弹ID=6}
    弹夹1子弹被打空了
    弹夹1子弹被打空了
    弹夹1子弹被打空了
    弹夹2射出子弹. ID=Bullet{子弹ID=1}
    弹夹2射出子弹. ID=Bullet{子弹ID=2}
    弹夹2射出子弹. ID=Bullet{子弹ID=3}
    弹夹2射出子弹. ID=Bullet{子弹ID=4}
    弹夹2射出子弹. ID=Bullet{子弹ID=5}
    弹夹2射出子弹. ID=Bullet{子弹ID=6}
    弹夹2子弹被打空了
    弹夹2子弹被打空了
    弹夹2子弹被打空了
    
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序