热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java初次编程练习

任务要求:设计一个类,包含若干基本属性和至少两个方法(可以从日常生活场景中提取)。在类中实现两个具有不同参数的构造方法。另外,设计一个包含main方法的类,用于测试和应用上述类。此作业需编写并调试通过。

任务要求:

设计一个类,包含若干基本属性和至少两个方法。
(可以从日常生活场景中提取)
在类中实现两个具有不同参数的构造方法。
另外,设计一个包含 main 方法的类,用于测试和应用上述类。
此作业需编写并调试通过。
应对设计的类进行详细的文字说明(类所封装的内容,属性、方法的功能与含义等)。

说明:

本次作业的主要目标是实现两个怪物之间的互攻,直至其中一个怪物死亡。
提交了整个项目。
编写了两个 .java 源文件,存储在 homework1\src\homework1\ 目录下。

Monster.java 文件定义了怪物类。
怪物类包括血量、法力值、攻击力、血量上限、法力上限等属性。
该类提供了攻击敌人、被攻击、判断是否存活、判断能否攻击等方法。

Test.java 文件中创建了两个怪物实例,并让它们互相攻击。

代码:

Monster 类

package homework1;
public class Monster {
public int HP; // 怪物的血量
private boolean alive; // 怪物是否存活
public int MP; // 怪物的法力值
public int damage; // 怪物的攻击力,1点攻击力可降低敌人1点血量,每次攻击会消耗相应法力值
final int max_HP = 100; // 怪物的血量上限
final int max_MP = 100; // 怪物的法力上限

public Monster() { // 无参数的构造方法
HP = max_HP; // 默认血量为最大值
MP = max_MP; // 默认法力为最大值
damage = 1; // 默认攻击力为1
alive = true; // 怪物初始状态为存活
}

public Monster(int HP, int MP, int damage) {
if (HP <0 || MP <0 || HP > max_HP || MP > max_MP) {
// 如果血量或法力值超出合法范围,抛出异常
System.out.println("非法的怪物参数!");
} else {
this.HP = HP; // 设置血量
this.MP = MP; // 设置法力值
this.damage = damage; // 设置攻击力
if (HP > 0) {
alive = true; // 血量大于0表示怪物存活
} else {
alive = false; // 血量为0表示怪物死亡
}
}
}

public void beAttacked(int damage) { // 被攻击方法
HP = Math.max(0, HP - damage); // 血量减少,但不低于0
if (HP == 0) {
alive = false; // 血量为0表示怪物死亡
}
}

public boolean isAlive() { // 判断怪物是否存活
return alive;
}

public boolean canAttack() { // 判断怪物是否能攻击
return MP >= damage; // 法力值大于等于攻击力才能攻击
}

public void attackOthers(Monster target) { // 攻击其他怪物
if (canAttack()) {
MP -= damage; // 法力值减少
target.beAttacked(damage); // 目标怪物被攻击
} else {
System.out.println("攻击失败!");
}
}
}

Test 类

package homework1;

import java.util.Scanner;

public class Test {
public static void main(String[] args) {
// 创建第一个怪物,使用无参数构造方法
Monster monster1 = new Monster();

// 创建第二个怪物,从用户输入获取参数
Scanner sc = new Scanner(System.in);
System.out.print("请输入第二个怪物的血量: ");
int monster_HP = sc.nextInt();
System.out.print("请输入第二个怪物的法力值: ");
int monster_MP = sc.nextInt();
System.out.print("请输入第二个怪物的攻击力: ");
int monster_damage = sc.nextInt();
sc.close();

// 使用用户输入的参数创建第二个怪物
Monster monster2 = new Monster(monster_HP, monster_MP, monster_damage);

// 当两个怪物都存活时,互相攻击
while (monster1.isAlive() && monster2.isAlive()) {
// 第一个怪物攻击第二个怪物
if (monster1.canAttack()) {
monster1.attackOthers(monster2);
}

// 第二个怪物攻击第一个怪物
if (monster2.canAttack()) {
monster2.attackOthers(monster1);
}
}

// 输出战斗结果
if (monster1.isAlive()) {
System.out.println("Monster1 是胜利者!");
} else if (monster2.isAlive()) {
System.out.println("Monster2 是胜利者!");
}
}
}

运行结果:



推荐阅读
  • Eclipse 下 JavaFX 程序开发指南
    本文介绍了 JavaFX,这是一个用于创建富客户端应用程序的 Java 图形和媒体工具包,并详细说明了如何在 Eclipse 环境中配置和开发 JavaFX 应用。 ... [详细]
  • 深入理解设计模式之观察者模式
    本文详细介绍了观察者模式,这是一种行为设计模式,适用于当对象状态发生变化时,需要通知其他相关对象的场景。文中不仅解释了观察者模式的基本概念,还通过Java代码示例展示了其实现方法。 ... [详细]
  • 本文介绍了两种使用Java发送短信的方法:利用第三方平台的HTTP请求和通过硬件设备短信猫。重点讲解了如何通过Java代码配置和使用短信猫发送短信的过程,包括必要的编码转换、串口操作及短信发送的核心逻辑。 ... [详细]
  • 本文探讨了Java中char数据类型的特点,包括其表示范围以及如何处理超出16位字符限制的情况。通过引入代码点和代码单元的概念,详细解释了Java处理增补字符的方法。 ... [详细]
  • 本文介绍了Java中使用线程池执行器(ExecutorService)来管理和调度多线程任务的方法。通过具体的代码示例,详细解释了不同类型的线程池创建方式及其应用场景。 ... [详细]
  • Spring Boot 入门指南
    本文介绍了Spring Boot的基本概念及其在现代Java应用程序开发中的作用。Spring Boot旨在简化Spring应用的初始设置和开发过程,通过自动配置和约定优于配置的原则,帮助开发者快速构建基于Spring框架的应用。 ... [详细]
  • 本文介绍了一种在Java中实现自然排序的方法,通过自定义比较器来处理包含数字的字符串,确保数字部分按照数值大小进行正确排序。 ... [详细]
  • 本文通过一个简单的Java程序示例,深入探讨了整型数据在Java中的溢出机制,以及这种机制背后的二进制补码表示法。文章不仅展示了具体的代码实现,还解释了为何加1操作会导致数值从最大值变为最小值。 ... [详细]
  • 主板市盈率、市净率及股息率的自动化抓取
    本文介绍了如何通过Python脚本自动从中国指数有限公司网站抓取主板的市盈率、市净率和股息率等关键财务指标,并将这些数据存储到CSV文件中。涉及的技术包括网页解析、正则表达式以及异常处理。 ... [详细]
  • Kotlin 扩展函数详解及其工作原理
    本文详细探讨了 Kotlin 中的扩展函数概念,包括其定义、使用方式以及背后的实现机制,并分析了使用扩展函数时的一些限制。 ... [详细]
  • 近期探讨了‘内部螺旋矩阵算法’的实现细节,并深入分析了面向对象编程中的可扩展性问题。基于这些讨论,本文通过引入桥梁设计模式对原有代码进行了优化与重构,以增强代码的灵活性和可维护性。 ... [详细]
  • 创建一个People类,年龄,工资,性别三个属性定义一个方法叫做找对象,找对象方法传过来一个人,首先如果性别相同,就输出不是同性恋如果对方是男的,年龄小于28,工资大于1000 ... [详细]
  • 本文旨在介绍在iOS平台进行直播技术开发前的准备工作,重点讲解AVFoundation框架的基本概念和使用方法。通过对AVFoundation的深入理解,开发者能够更好地掌握直播应用中的音视频处理技巧。 ... [详细]
  • 本文探讨了如何在 Spring 3 MVC 应用程序中配置 MySQL 数据库连接,通过 XML 配置实现 JDBC 直接操作数据库,而不使用 Hibernate 等额外框架。 ... [详细]
  • 深入解析 Golang 中的 Cache::remember 方法实现
    本文详细探讨了如何在 Golang 中实现类似于 Laravel 的 Cache::remember 方法,通过具体的代码示例和深入的分析,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
维尼饭爱nichkhun_774
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有