当前位置: 首页 > news >正文

Java 入门实验:手把手实现 Tank 坦克类(面向对象基础实战)

一、需求

我们要编写一个Tank坦克类,实现坦克的核心功能:

  1. 记录坦克的速度(double 类型)和炮弹数量(int 类型);
  2. 实现加速减速(速度不能为负)功能;
  3. 实现设置炮弹数量获取炮弹数量获取速度功能;
  4. 实现开火功能(有炮弹才能发射,发射后炮弹数量减 1);
  5. 编写测试类Fight,创建两个坦克对象,测试所有功能。

二、核心知识点

  1. 类与对象:类是对象的模板(比如Tank是坦克模板),对象是类的实例(比如tank1tank2是具体的坦克);
  2. 成员变量:定义在类中、方法外的变量,用来描述对象的属性(速度、炮弹数量就是坦克的属性);
  3. 成员方法:定义在类中的方法,用来描述对象的行为(加速、减速、开火就是坦克的行为);
  4. 方法调用:通过「对象名。方法名 ()」调用对象的方法,实现对象的行为。

三、完整代码实现

1. Tank 类(坦克模板)

这个类定义了坦克的所有属性和行为,替换模板中的【代码】即可:

public class Tank { // 【代码 1】声明 double 型变量 speed,刻画速度 double speed; // 【代码 2】声明 int 型变量 bulletAmount,刻画炮弹数量 int bulletAmount; // 加速方法:参数s为增加的速度值 void speedUp(int s) { // 【代码 3】将 s+speed 赋值给 speed speed = s + speed; } // 减速方法:参数d为减少的速度值,速度不能小于0 void speedDown(int d) { if(speed - d >= 0) // 【代码 4】将 speed-d 赋值给 speed speed = speed - d; else speed = 0; // 速度最低为0 } // 设置炮弹数量 void setBulletAmount(int m) { bulletAmount = m; } // 获取炮弹数量 int getBulletAmount() { return bulletAmount; } // 获取当前速度 double getSpeed() { return speed; } // 开火方法:有炮弹才能发射 void fire() { if(bulletAmount >= 1){ // 【代码 5】将 bulletAmount-1 赋值给 bulletAmount bulletAmount = bulletAmount - 1; System.out.println("打出一发炮弹"); } else { System.out.println("没有炮弹了,无法开火"); } } }

2. Fight 类(测试类)

创建坦克对象,调用方法测试坦克的所有功能:

public class Fight { public static void main(String args[]) { // 声明坦克对象引用 Tank tank1,tank2; // 创建具体的坦克对象(实例化) tank1 = new Tank(); tank2 = new Tank(); // 为两个坦克设置初始炮弹数量 tank1.setBulletAmount(10); tank2.setBulletAmount(10); // 打印初始炮弹数量 System.out.println("tank1 的炮弹数量:"+tank1.getBulletAmount()); System.out.println("tank2 的炮弹数量:"+tank2.getBulletAmount()); // 坦克加速 tank1.speedUp(80); tank2.speedUp(90); // 打印加速后的速度 System.out.println("tank1 目前的速度:"+tank1.getSpeed()); System.out.println("tank2 目前的速度:"+tank2.getSpeed()); // 坦克减速 tank1.speedDown(15); tank2.speedDown(30); // 打印减速后的速度 System.out.println("tank1 目前的速度:"+tank1.getSpeed()); System.out.println("tank2 目前的速度:"+tank1.getSpeed()); // 坦克开火测试 System.out.println("tank1 开火:"); tank1.fire(); System.out.println("tank2 开火:"); tank2.fire(); tank2.fire(); // tank2连续开火两次 // 打印开火后的炮弹数量 System.out.println("tank1 的炮弹数量:"+tank1.getBulletAmount()); System.out.println("tank2 的炮弹数量:"+tank2.getBulletAmount()); } }

四、代码关键解析

  1. 【代码 1、2】成员变量声明直接在类中定义变量,不需要写static,属于对象的属性,每个坦克对象都有独立的速度和炮弹数量。

    double speed; // 速度 int bulletAmount; // 炮弹数量
  2. 【代码 3】加速逻辑速度 = 原有速度 + 增加的速度,直接赋值即可:

    speed = s + speed;
  3. 【代码 4】减速逻辑先判断减速后速度是否≥0,满足条件就更新速度:

    speed = speed - d;
  4. 【代码 5】开火逻辑每开一次火,炮弹数量减 1,确保有炮弹才能发射:

    bulletAmount = bulletAmount - 1;

五、运行结果

运行Fight类的main方法,控制台输出如下:

tank1 的炮弹数量:10 tank2 的炮弹数量:10 tank1 目前的速度:80.0 tank2 目前的速度:90.0 tank1 目前的速度:65.0 tank2 目前的速度:65.0 tank1 开火: 打出一发炮弹 tank2 开火: 打出一发炮弹 打出一发炮弹 tank1 的炮弹数量:9 tank2 的炮弹数量:8

六、实验总结

通过这个 Tank 坦克实验,我们掌握了 Java 面向对象最核心的基础:

  1. 类是模板,对象是实例Tank定义了坦克的通用属性和行为,tank1/tank2是具体的坦克;
  2. 成员变量描述属性speedbulletAmount记录坦克的状态;
  3. 成员方法描述行为:加速、减速、开火都是坦克的功能,通过方法实现;
  4. 对象独立:两个坦克对象的速度、炮弹数量互不影响,这就是面向对象的「封装性」
http://www.zskr.cn/news/1375998.html

相关文章:

  • Terraform 实战:用 for 表达式将列表元素转换为大写
  • sudo高危漏洞CVE-2023-27350原理与1.9.5p2修复实战
  • 基于Transformer的行星大气辐射传输仿真器:百倍加速与1%精度
  • 中医馆升级|结合瑞式养老模式的医养结合完整落地方案
  • topcode【随机算法题】【2026.5.24打卡-java版本】
  • 《道德经》第二十章
  • 华硕笔记本终极优化指南:如何用G-Helper轻量级工具全面提升使用体验
  • 别再折腾VMware Tools了!用FileZilla+SSH搞定Windows与Ubuntu虚拟机文件互传(保姆级教程)
  • VMware Workstation Pro 17上快速体验Rocky Linux 8.6:从镜像下载到命令行登录的5分钟极简流程
  • Appium Android自动化环境四段链路深度验证指南
  • 图神经网络在高能物理径迹重建中的应用:ETX4VELO项目解析
  • Burp Suite代理配置深度解析:HTTP/HTTPS/SOCKS全链路实战指南
  • 高效JetBrains IDE评估重置架构解析:模块化解决方案实现原理
  • Thirtyfour:Rust原生WebDriver客户端实战指南
  • 计算化学与AI融合:遗传算法与机器学习加速新型钴基单分子磁体设计
  • UE5描边材质实战:从Sobel算子到蓝图交互,手把手教你实现可点击高亮
  • AIMS-PAX:并行主动学习框架加速机器学习力场构建
  • CTF流量分析中HTTP对象丢失的7大原因与实战破解
  • 3分钟极速获取:百度网盘提取码智能查询工具全攻略
  • 基于VAE与UMAP的类星体光谱生成与物理关联挖掘实践
  • Wi-Fi链路质量预测:基于EMA组合的轻量级模型原理与工程实践
  • 如何快速掌握BepInEx插件框架:新手的完整避坑指南
  • Unity独立开发者必看:用UniStorm天气系统5分钟搞定开放世界氛围感
  • Unity中RVO抖动根治指南:从速度空间崩溃到稳定群组运动
  • OllyDbg 1.10实战指南:32位Windows逆向分析入门
  • GNSS干扰检测:机器学习模型在真实环境中的泛化挑战与工程实践
  • Unity Application.Quit() 退出失败的全链路解析与工程化方案
  • 机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践
  • 告别‘找茬’游戏:用Python复现ALCNet,让红外小目标检测又快又准
  • 机器学习发现物理守恒量:从数据中挖掘对称性与不变性