Java 面向对象案例01(黑马)

news2024/12/23 23:37:24

文字版格斗游戏

在Javabean类中定义方法的形参的数据类型可以是什么?

在JavaBean类中,方法的形参的数据类型可以是任何合法的Java数据类型,包括基本数据类型(如int、char、boolean等)、引用数据类型(如String、Object等)、数组类型、自定义数据类型等。

在javabean类中方法定义的形参的自定义数据类型是什么意思?

在JavaBean类中方法定义的形参的自定义数据类型指的是使用开发者自己定义的类作为方法的参数类型。这意味着可以使用自定义类中定义的属性和方法来操纵传递给方法的数据。

例如,假设有一个名为Person的自定义类,其中定义了属性name和age,以及方法getName()和getAge()等。在JavaBean类中的方法定义中,可以将Person类作为参数类型,如下所示:

初级版代码:
 

import java.util.Random;

public class Role {
    private String name;
    private int blood;


    public Role() {//空参
    }

    public Role(String name, int blood) {//全参
        this.name = name;
        this.blood = blood;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return blood
     */
    public int getBlood() {
        return blood;
    }

    /**
     * 设置
     *
     * @param blood
     */
    public void setBlood(int blood) {
        this.blood = blood;
    }

    //定义一个方法用于攻击别人:
    public void attack(Role role) {
        //计算造成的伤害(随机数)
        Random r=new Random();
        int hurt= r.nextInt(20)+1;
        //int hurt = (int)(Math.random()*20)+1;
        //修改一下挨揍的人的血量
        int remainBlood = role.getBlood() - hurt;
        //对剩余血量做一个验证,如果血量为负数,则让其输出为0;

        remainBlood = remainBlood<0  ?  0 : remainBlood;
        role.setBlood(remainBlood);


        System.out.println(this.getName()+"举起拳头,打了"+role.getName()+" 一下," +
                "造成了"+hurt+"点伤害,"+role.getName()+"还剩下"+remainBlood+"点血量 ");
    }

}

public class GameTest {
    public static void main(String[] args) {
        //1、创建第一个角色
        Role r1 = new Role("乔峰",100);
        //2、创建第二个角色
        Role r2 = new Role("鸠摩智",100);
        //3、开始格斗 回合制游戏
        while(true){
            r1.attack(r2);
            if(r2.getBlood()==0){
                System.out.println(r1.getName()+"K.O"+r2.getName());
                break;
            }
            r2.attack(r1);
            if(r1.getBlood()==0){
                System.out.println(r2.getName()+"K.O"+r1.getName());
                break;
            }
        }
    }
}

运行结果:

这个样子赋值也可以

升级版:

补充知识点:%s,System.out.printf;

这个输出只能输出,不能换行

如果前面的” “里面有两个%s,那么后面也应该有两个补充的内容,否则会报错,例如:

升级版代码:

public class GameTest {
    public static void main(String[] args) {
        //1、创建第一个角色
        Role r1 = new Role("乔峰",100,'男');
        //2、创建第二个角色
        Role r2 = new Role("鸠摩智",100,'男');

        r1.showRoleinfo();
        r2.showRoleinfo();
        //3、开始格斗 回合制游戏
        while(true){
            r1.attack(r2);
            if(r2.getBlood()==0){
                System.out.println(r1.getName()+"K.O"+r2.getName());
                break;
            }
            r2.attack(r1);
            if(r1.getBlood()==0){
                System.out.println(r2.getName()+"K.O"+r1.getName());
                break;
            }
        }
    }
}
import java.util.Random;

public class Role {
    private String name;
    private int blood;
    private char gender;
    private String face;//随机的

    public Role() {//空参
    }

    public Role(String name, int blood,char gender) {//全参
        this.name = name;
        this.blood = blood;
        this.gender = gender;
        //随机长相
        setFace(gender);
    }

    String[] boyfaces ={"风流倜傥","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂","面目狰狞"};
    String[] girlfaces ={"美轮美奂","沉鱼落雁","亭亭玉立","身材姣好","相貌平平","相貌丑陋","惨不忍睹"};

    String[] attacks_desc={
            "%s使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍去。",
            "%s使出一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
            "%s大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
            "%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。",
            "%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。",
            "%s上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。"};

    String[] injured_desc ={"结果%s退了半步,毫发无损",
            "结果给%s造成一处瘀伤",
            "结果一击命中,%s痛得弯下腰",
            "结果%s痛苦地闷哼了一声,显然受了点内伤",
            "结果%s摇摇晃晃,一跤摔倒在地",
            "结果%s脸色一下变得惨白,连退了好几步",
            "结果『轰』的一声,%s口中鲜血狂喷而出",
            "结果%s一声惨叫,像滩软泥般塌了下去"};


    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public String getFace() {
        return face;
    }

    public void setFace(char gender) {
        Random r = new Random();
        if(gender=='男') {
            //随机长相
            int index = r.nextInt(boyfaces.length);
            this.face=boyfaces[index];
        }else if(gender=='女'){
            int index = r.nextInt(girlfaces.length);
            this.face=girlfaces[index];

        }
        else{

            this.face = "面目狰狞";
        }
    }



    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return blood
     */
    public int getBlood() {
        return blood;
    }

    /**
     * 设置
     *
     * @param blood
     */
    public void setBlood(int blood) {
        this.blood = blood;
    }

    //定义一个方法用于攻击别人:
    public void attack(Role role) {
        Random r= new Random();
        int index = r.nextInt(attacks_desc.length);
        String KungFu = attacks_desc[index];
        //输出一个攻击的效果
        System.out.printf(KungFu,this.getName(),role.getName());
        System.out.println();

        //计算造成的伤害(随机数)
        int hurt= r.nextInt(20)+1;
        //int hurt = (int)(Math.random()*20)+1;
        //修改一下挨揍的人的血量
        int remainBlood = role.getBlood() - hurt;
        //对剩余血量做一个验证,如果血量为负数,则让其输出为0;

        remainBlood = remainBlood <0  ?  0 : remainBlood;
        role.setBlood(remainBlood);

        //受伤的描述
        if( remainBlood>90){
            System.out.printf(injured_desc[0],role.getName());
        }else if(remainBlood>80){
            System.out.printf(injured_desc[1],role.getName());
        }else if(remainBlood>70){
            System.out.printf(injured_desc[2],role.getName());
        }else if(remainBlood>60){
            System.out.printf(injured_desc[3],role.getName());
        }else if(remainBlood>50){
            System.out.printf(injured_desc[4],role.getName());
        }else if(remainBlood>40){
            System.out.printf(injured_desc[5],role.getName());
        }else if(remainBlood>30){
            System.out.printf(injured_desc[6],role.getName());
        }else{
            System.out.printf(injured_desc[7],role.getName());
        }
        System.out.println();
    }

    public void showRoleinfo(){
        System.out.println("姓名为"+getName());
        System.out.println("血量为"+getBlood());
        System.out.println("性别为"+getGender());
        System.out.println("相貌为"+getFace());

    }

}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1403139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【文件处理】spring boot 文件处理

接收文件 PostMappingpublic result<String> add(MultipartFile file) throws IOException {// 得到目标文件夹File directory new File("file");//如果文件夹不存在就创建if(!directory.exists()){directory.mkdirs();}//文件名称String fileName file.getO…

分子生成工具应用案例+流程 - Pocket Crafter

2023年10月9日&#xff0c;诺华公司的Lingling Shen和He Wang在Chemrxiv上发表了文章《Pocket Crafter: A 3D Generative Modeling Based Workflow for the Rapid Generation of Hit Molecules in Drug Discovery》&#xff0c;介绍了他们分子生成在hit finding项目应用中的pip…

python+appium自动化测试-Appium并发测试之python启动appium服务

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【加速计算】从硬件、软件到网络互联,AI时代下的加速计算技术

AI、元宇宙、大模型…每一个火爆名词的背后都代表着巨大的算力需求。据了解,AI模型所需的算力每100天就要翻一倍,远超摩尔定律的18-24个月。5年后,AI所需的算力规模将是今天的100万倍以上。 在这种背景下,加速计算提供了必要的计算能力和内存,其解决方案涉及硬件、软件和…

ChatGPT:关于 OpenAI 的 GPT-4工具,你需要知道的一切

ChatGPT&#xff1a;关于 OpenAI 的 GPT-4工具&#xff0c;你需要知道的一切 什么是GPT-3、GPT-4 和 ChatGPT&#xff1f;ChatGPT 可以做什么&#xff1f;ChatGPT-4 可以做什么&#xff1f;ChatGPT 的费用是多少&#xff1f;GPT-4 与 GPT-3.5 有何不同&#xff1f;ChatGPT 如何…

红黑树(超详解)

文章目录 前言红黑树的概念红黑树的实现红黑树的结构 insert 前言 上一篇文章我们讲了AVL树,但是AVL树只是一个过渡,我们实际当中用的更多另外一颗树还是红黑树. 也不能说红黑树就是AVL树的改进,它是用另外一种方式来控制. 这棵树更抽象一些,下一步我们来看一下. 红黑树的概…

气膜建筑助力体育场馆智能化升级

随着科技的不断进步和人们对健康生活的日益重视&#xff0c;体育馆作为体育活动的主要场所也面临着智能化升级的时刻。在这个背景下&#xff0c;气膜建筑以其轻巧、灵活的特性正成为推动体育馆智能化升级的创新力量。 气膜建筑的独特优势 气膜建筑采用特殊的薄膜材料&#xff…

每日一题——LeetCode1299.将每个元素替换为右侧最大元素

方法一 个人方法&#xff1a; 题目意思就是求在i1;i的循环条件下&#xff0c;arr[i]-arr[arr.length-1]的最大值分别为多少&#xff0c;最后一项默认为-1 用slice方法可以每次把数组第一位去除&#xff0c;得到求最大值的目标数组 Math的max方法可以直接返回数组里的最大值 …

archlinux安装软件

用 pacman 安装 sudo pacman -S XXXX xxx 中填写要安装的软件就可以了 搜索的命令是 pacman -Ss 搜索的话不需要管理员权限 查看已经安装的程序 pacman -Q 可以通过 | 将前面的信息传给后面&#xff0c;相当于传参 pacman -Q | grep XXXX 删除软件 sudo pacman -Rs…

Python中的函数(二)

1 闭包与装饰器 1.1 闭包 闭包&#xff08;Closure&#xff09;是指在一个函数内部定义的函数&#xff0c;并且该内部函数可以访问外部函数作用域中的变量。闭包可以在外部函数执行完毕后&#xff0c;仍然保持对外部函数作用域的引用&#xff0c;从而可以继续访问和操作外部函…

银河麒麟桌面桌面操作系统v10保姆级安装

目录 一、下载ISO映像文件 1.产品试用申请 2.试用版下载 二、虚拟机搭建 1.新建虚拟机 2. 选择虚拟机硬件兼容性 3.选择安装客户机操作系统 4.选择客户机操作系统 5.命名虚拟机 6.处理器配置 7.虚拟机内存 8.网络类型 9.硬件 10.指定磁盘容量 三、修改虚拟…

「优选算法刷题」:在排序数组中查找元素的第一个和最后个位置

一、题目 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&a…

【Linux】解决普通用户无法进行sudo提权

当某个普通用户进行sudo指令提权的时候&#xff0c;可能存在无法操作的问题&#xff0c;如下图&#xff1a; 这个图中有一个细节&#xff0c;我们使用sudo进行提权的时候&#xff0c;用的可是zhangsan的密码&#xff0c;因此有人可能会有疑问&#xff0c;这不是有问题吗&#x…

在CentOS 7中配置 RAID服务

实验过程 Xnode1克隆虚拟机raid ps&#xff1a; 阿里云盘Xnode1获取 xnode1 https://www.alipan.com/s/HgLXfoeBWG2 提取码: eb70 编辑虚拟机 添加2硬盘 CRT连接&#xff08;root密码&#xff1a;000000&#xff09; 创建raid 0 [rootdemo ~]# lsblk 安装mdadm [rootdemo…

数据结构之栈的基本操作

该顺序栈涉及到了存储整型数据的顺序栈还有存储字符型数据的顺序栈 实现的功能有&#xff1a;入栈、出栈、判断是否为空栈、求栈的长度、清空栈、销毁栈、得到栈顶元素 此外根据上述功能&#xff0c;编写了数值转换&#xff08;十进制转化八进制&#xff09;方法、括号匹配方法…

无人机航迹规划(四):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖…

【ARM 嵌入式 编译系列 7.3 -- GCC 链接脚本中 DISCARD 与 .ARM.exidx】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 背景.ARM.exidx方法一:使用链接器脚本方法二:使用链接器选项注意事项背景 在移植 RT-Thread 到 cortex-m33(RA4M2)上的时候,在编译的时候遇到下面问题: Building target: ra4m2.elf arm

Gitee Reward让开源作者不再为爱发电

一、什么是Gitee Reward&#xff1f; Gitee Reward是Gitee为改善开源开发生命周期提出的新策略。开源项目的支持者们可以更轻松地为其喜爱的项目提供资金&#xff0c;贡献者们也可以因为其不懈的开源贡献得到奖励。 二、Gitee Reward上允许哪些类型的项目&#xff1f; 允许任…

DL专栏—笔记目录

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要是记录工作中、学习中关于AI(Deep Learning)相关知识并分享。 &#x1f60a;&#x1f60a;&#x1f…