首页 > 其他分享 >静态字段与静态方法_练习

静态字段与静态方法_练习

时间:2024-09-30 12:44:27浏览次数:10  
标签:静态方法 静态 hp private int 字段 hero1 Hero public

对象村出生人数

public class Person {
    private final String name; // 姓名
    private final int height; // 身高

    private static int numberOfPeople = 0; // 人数

    public Person(String name, int height) {
        this.name = name;
        this.height = height;
        numberOfPeople++; // !!!由于设置为private,本代码下只能通过构造器修改numberOfPeople字段
    }

    // getNumberOfPeople通过Generate...生成
    public static int getNumberOfPeople() { // 这是一个静态方法
        return numberOfPeople;
    }

    public static void main(String[] args) {
        // 方便起见,直接在Person类中添加一个main方法测试Person类
        // 而不再引入PersonTest类
        System.out.printf("对象村已出生 %d 人%n", Person.getNumberOfPeople());
        // 无需创建对象,也可以直接使用静态方法访问静态变量! 静态的东西先于对象存在!
        Person p = new Person("张三", 175);
        Person p2 = new Person("李四", 185);
        System.out.printf("对象村已出生 %d 人%n", Person.getNumberOfPeople());

        for (int i = 0; i != 20; ++i) {
            new Person("王五", 180);
        }
        System.out.printf("对象村已出生 %d 人%n", Person.getNumberOfPeople());
    }
}

自动回合对战改进版

Hero.java

public class Hero {
    private static final int MIN_HP = 0;
    private static final int MAX_HP = 100; // 限制小兵的最大生命值
    private static final int MAX_MAX_DAMAGE = 50; // 限制小兵的最大伤害值

    private static int randomCharacterId = 0; // 保存角色id
    public static boolean isDebugMode = true; // 控制是否打印对战细节,不开启则只打印对战结果

    private final String heroName; // 英雄名称
    private int hp; // 血条、生命值
    private final int maxDamage; // 表示角色能够造成的最大伤害值

    private Hero(String heroName, int hp, int maxDamage) {
        // 请注意,这里将构造器设置为private使得无法在其它类中调用Hero构造器创建对象
        this.heroName = heroName;
        this.hp = hp;
        this.maxDamage = maxDamage;
    }

    public static Hero of(String heroName, int hp, int maxDamage) {
        return new Hero(heroName, hp, maxDamage);
    }

    public static Hero randomCharacter() {
        String name = "小兵#" + randomCharacterId; // 小兵名字
        randomCharacterId++; // id需要保持唯一,自增1
        int hp = 10 + (int)(Math.random() * MAX_HP); // 小兵hp在10~110
        int maxDamage = 10 + (int)(Math.random() * MAX_MAX_DAMAGE); // 小兵攻击在10~60

        return new Hero(name, hp, maxDamage);
    }

    public String getHeroName() {
        return heroName;
    }

    public int getHp() {
        return hp;
    }

    public void attack(Hero otherHero) {
        int damage = (int)(Math.random() * maxDamage); // 生成伤害值,随机造成0~maxDamage的伤害
        // 对应英雄承受该伤害
        otherHero.takeDamage(damage);
        if (isDebugMode) {
            System.out.printf("%s 对 %s 造成了 %d 点伤害", this.heroName, otherHero.heroName, damage);
            System.out.printf("(%s 还剩 %d 生命值)\n", otherHero.heroName, otherHero.getHp());
        }
    }

    public void takeDamage(int damage) {
        this.hp -= damage;
        if (this.hp < MIN_HP) {
            this.hp = MIN_HP;
        }
    }

    public boolean isAlive() {
        return this.hp > MIN_HP;
    }

    public static void battle(Hero hero1, Hero hero2) {
        System.out.printf("%s(HP: %d) 与 %s(HP: %d) 开始对战\n", hero1.getHeroName(), hero1.getHp(), hero2.getHeroName(), hero2.getHp());

        int round = 1;
        while (hero1.isAlive() && hero2.isAlive()) {
            if (isDebugMode) {
                System.out.printf("********* 回合 %d *********\n", round);
            }
            round++;
            hero1.attack(hero2);
            hero2.attack(hero1);
        }

        System.out.printf("经过 %d 回合对战 ", round - 1);
        if (hero1.isAlive()) {
            System.out.printf("%s 胜出%n", hero1.getHeroName());
        } else if (hero2.isAlive()) {
            System.out.printf("%s 胜出%n", hero2.getHeroName());
        } else {
            System.out.printf("%s 与 %s 同归于尽%n", hero1.getHeroName(), hero2.getHeroName());
        }
        System.out.println();
    }
}

 HeroTest.java

public class HeroTest {
    public static void main(String[] args) {
        Hero hero1 = Hero.of("齐天大圣", 250, 105);
        Hero hero2 = Hero.of("二郎神", 110, 45);

        Hero.battle(hero1, hero2);

        Hero.isDebugMode = false;

        for (int i = 0; i != 10; ++i) {
            if (hero1.isAlive()) {
                Hero.battle(hero1, Hero.randomCharacter());
            }
        }
    }
}

 

标签:静态方法,静态,hp,private,int,字段,hero1,Hero,public
From: https://www.cnblogs.com/xkxf/p/18440956

相关文章

  • Apache伪静态出现页面无法正常访问处理
    默认规则:apache RewriteRule^(.*)$index.php/$1[QSA,PT,L]这条规则适用于Apache采用模块化运行方式的情况。当请求URL不是目录或文件时,将所有请求重写为index.php/$1。备用规则:apache RewriteRule^(.*)$index.php[E=PATH_INFO:$1,QSA,PT,L]这条......
  • C++ 静态顺序表和动态顺序表
    对比静态顺序表与动态顺序表特性静态顺序表动态顺序表大小固定动态内存管理简单复杂随机访问快速快速插入/删除效率较低较低(需移动元素)扩展能力不可扩展可扩展C++静态顺序表概述定义:静态顺序表是一种线性表的实现方式,采用一段连续的内存空间存储数据元素,具有固定的大小。在......
  • 获取公共字段
     publicinterfaceSalaryAccountingStatementImportBaseVO{StringgetIdCard();}@DatapublicclassSalaryAccountingStatementImportVOimplementsSalaryAccountingStatementImportBaseVO{}@DatapublicclassSalaryAccountingStatementImportOutsourceV......
  • 记一次触发器用最新一条记录更新另外一条记录字段值的操作
    查询数据库里面最新一条记录的正确思路数据库里面的记录肯定有时间字段,找到时间的最大值,在where里面查询最新的的时间触发器查询的时候应该加上时间限制,不然随着时间的推移查询越来越慢触发器应该是beforeinsert类型不然会存在递归引用使用oracle函数或者mysql函数来执行时......
  • pbootcms制作TAG标签列表时改成静态栏目URL结构
    在PBootCMS中,将TAG标签列表从动态链接转换为静态化的类似栏目结构的需求可以通过以下步骤实现:步骤1:修改PHP文件打开PHP文件:打开 APPs/home/controller/ParserController.php 文件。找到并修改代码:找到大约第1852行左右的代码。删除原有代码,并替换为新的代码......
  • 类的静态数据成员
    类的静态数据成员有时需要为某个类的所有对象分配一个单一的存储空间。在C语言中,可以用全局变量,但这样很不安全。全局数据可以被任何人修改,而且,在一个项目中,它很容易与其他的名字相冲突。如果可以把一个数据当成全局变量那样去存储,但又被隐藏在类的内部,并且清楚地与这个......
  • MySQL:去除字段中空格及前后空格
    1、使用TRIM()函数TRIM()函数可以去除字段的前后空格,并返回处理后的结果。可以在查询语句中使用TRIM()函数来实现去除字段空格的功能,示例如下:SELECTTRIM(column_name)FROMtable_name;这种方法会去除字段中的前后空格,但保留字段内部的空格。2、使用REPLACE()函数REPLACE......
  • 类中静态代码块、静态属性加载顺序
     1、如果静态属性在静态代码块前面classFoo{publicFoo(){System.out.println("我是Example的静态属性foo");System.out.println("未修改的静态属性值为====>"+Example.staticVariable);Example.staticVariable=2;......
  • 地平线静态目标检测 MapTR 参考算法-V1.0
    1.简介高清地图是自动驾驶系统的重要组件,提供精确的驾驶环境信息和道路语义信息。传统离线地图构建方法成本高,维护复杂,使得依赖车载传感器的实时感知建图成为新趋势。早期实时建图方法存在局限性,如处理复杂地图元素的能力不足、缺乏实例级信息等,在实时性和后处理复杂度上存在挑战......
  • jpa~为字段添加insert的默认值
    前言如果多个实体类都有isDelete字段,并且你希望在插入时为它们统一设置默认值,可以采取以下几种方法来减少代码重复:1.使用基类(抽象类)创建一个基类,其中包含isDelete字段和@PrePersist方法。然后让所有需要这个字段的实体类继承这个基类。示例代码:importjavax.persisten......