java-面向对象综合练习

news2024/12/25 0:57:18

1、文字格斗回合制游戏

需求:

格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。

举例:

程序运行之后结果为:

姓名为:乔峰 血量为:100

姓名为:鸠摩智 血量为:100

乔峰举起拳头打了鸠摩智一下,造成了XX点伤害,鸠摩智还剩下XXX点血。

鸠摩智举起拳头打了鸠摩智一下,造成了XX点伤害,乔峰还剩下XXX点血。

乔峰举起拳头打了鸠摩智一下,造成了XX点伤害,鸠摩智还剩下XXX点血。

鸠摩智举起拳头打了鸠摩智一下,造成了XX点伤害,乔峰还剩下XXX点血。

乔峰K.O.了鸠摩智

public class TextCombat01 {
    public static void main(String[] args) {
        Role r1 = new Role("乔峰", 120);
        Role r2 = new Role("鸠摩智", 100);
        while(true){
            r1.attack(r2);
            if(r2.getBlood() == 0){
                System.out.println(r1.getName() + "KO了" + r2.getName());
                break;
            }
            r2.attack(r1);
            if(r1.getBlood() == 0){
                System.out.println(r2.getName() + "KO了" + r1.getName());
            }
        }

    }
}
class Role {
    private String name;//姓名
    private int blood;//血量

    public Role() {
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getBlood() {
        return blood;
    }

    public void setBlood(int blood) {
        this.blood = blood;
    }

   // 方法的调用者去攻击参数
    public void attack(Role role){
        Random random = new Random();
        //造成伤害的血量
        int hurt_blood = random.nextInt(20) + 1;
        //角色剩余血量
        int blood = role.getBlood() - hurt_blood;
        //判断血量是否为空
        blood = blood < 0 ? 0 : blood;
        //设置被攻击者的血量
        role.setBlood(blood);
        //this方法表示调用者
        System.out.println(this.name + "攻击了," + role.getName() + ",造成了"+hurt_blood+ "点伤害,"
        + role.getName() + " 剩余血量是 " + role.getBlood());

    }
}

运行结果:

2、数组对象综合练习

需求:

定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。

学生的属性:学号,姓名,年龄。

要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。

要求2:添加完毕之后,遍历所有学生信息。

要求3:通过id删除学生信息

如果存在,则删除,如果不存在,则提示删除失败。

要求4:删除完毕之后,遍历所有学生信息。

要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁

public class ArrayObject {
    public static void main(String[] args) {
        Student[] newArray = null;
        //定义一个数组
        Student[] students = new Student[3];
        //定义两个学生对象
        Student s1 = new Student(1, "zhangsan", 18);
        Student s2 = new Student(2, "lisi", 20);
        Student s3 = new Student(3, "lisi", 20);
        //将对象放入数组中
        students[0] = s1;
        students[1] = s2;
        students[2] = s3;
        Student s4 = new Student(4, "wangwu", 21);
        //根据学号判断是否存在
        boolean flag = contain(students, s4);
        //System.out.println(flag);
        if(flag){
            //首先判断数组是否已满,如果满了需要创建一个新的数组,长度为当前数组长度+1
            int count = getCount(students);
            if(count == students.length){
                //创建一个新的数组,长度为当前长度+1
                newArray = getNewArray(students);
                newArray[newArray.length - 1] = s4;
            }
            //students[2] = s3;
        }else{
            System.out.println("学号:"+s4.getCode() + "已存在");
        }
        //遍历数组
        forAll(newArray);
        //判断数组中是否有code
        int code = 9;
        boolean isHaving = false;
        Student[] new_arr = null;
        for (int i = 0; i < newArray.length; i++) {
            if(newArray[i] != null){
                if(newArray[i].getCode() == code){
                    //删除
                    new_arr = deleteArrayById(code, newArray);
                    isHaving = true;
                    break;
                }
            }
        }
        if(!isHaving){
            System.out.println("删除失败");
        }else{
            System.out.println("遍历新数组");
            forAll(new_arr);
        }

        Student[] a1 = selectById(2, newArray);
        forAll(a1);
    }

    public static Student[] selectById(int code,Student[] array){
        for (int i = 0; i < array.length; i++) {
            if(array[i] != null){
                if(array[i].getCode() == code){
                    int age = array[i].getAge();
                    array[i].setAge(age + 1);
                    break;
                }
            }
        }
        return array;
    }

    public static Student[] deleteArrayById(int code,Student[] array){

        Student[] new_arr = new Student[array.length - 1];
        int count = 0;
        for (int i = 0; i < array.length; i++) {
            if(array[i] != null){
                if(array[i].getCode() !=  code){
                    new_arr[count] = array[i];
                    count ++;
                    continue;
                }
            }
        }

        return new_arr;
    }

    public static Student[] getNewArray(Student[] arr){
        int old_len = arr.length;
        Student[] newArr = new Student[old_len + 1];
        for (int i = 0; i < arr.length; i++) {
             newArr[i] = arr[i];
        }
        return newArr;
    }
    public static int getCount(Student[] arr){
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null){
                count ++;
            }
        }
        return count;
    }
    public static void removeByCode(int code,Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null){
                if(code == arr[i].getCode()){
                    // arr.
                }
            }
        }
    }
    public static void forAll(Student[] students){
        for (int i = 0; i < students.length; i++) {
            if(students[i] != null){
                System.out.println("学号:" + students[i].getCode()+";姓名:"+students[i].getName()+";年龄:" + students[i].getAge());
            }

        }
    }
    //根据学号判断数组中是否存在
    public static boolean contain(Student[] students,Student student){
        boolean flag = true;
        int code = student.getCode();
        for (int i = 0; i < students.length; i++) {
            Student s1 = students[i];
            if(s1 != null){
                if(s1.getCode() == code){
                    flag = false;
                    break;
                }
            }

        }
        return flag;
    }
}
//定义学生对象
class Student{
    private int code;
    private String name;
    private int age;

    public Student(int code, String name, int age) {
        this.code = code;
        this.name = name;
        this.age = age;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

3、字符串练习1

 需求:

键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
public class CountChars {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //请输入字母或者数字
        String contents = sc.next();
        //大写字母数量
        int upCount = 0;
        //小写字母数量
        int lowerCount = 0;
        //数字数量
        int numCount = 0;
        for (int i = 0; i < contents.length(); i++) {
            char c = contents.charAt(i);
            if(c >= 'a' && c <= 'z'){
                lowerCount ++;
            }else if(c >= 'A' && c <= 'Z'){
                upCount ++;
            }else if(c >= '0' && c <= '9'){
                numCount ++;
            }
        }
        System.out.println("大写字母个数:" + upCount);
        System.out.println("小写字母个数:" + lowerCount);
        System.out.println("数字个数:" + numCount);
    }
}

4、字符串练习2

需求:

定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法, 

并在控制台输出结果。例如,数组为 int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]

public class StringTest01 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4};
        StringBuffer test = test(arr);
        System.out.println(test.toString());
    }

    public static StringBuffer test(int[] arr){
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);

            if(i < arr.length - 1){
                sb.append(",");
            }

        }
        sb.append("]");
        return sb;
    }
}

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

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

相关文章

加密软件中的RSA和ECC的主要区别是什么

在加密软件中&#xff0c;RSA&#xff08;Rivest-Shamir-Adleman&#xff09;和ECC&#xff08;Elliptic Curve Cryptography&#xff0c;椭圆曲线密码学&#xff09;是两种广泛使用的非对称加密算法&#xff0c;它们之间存在多个关键区别。 1. 算法基础 RSA&#xff1a;基于大…

RPA+AI有什么应用?6大技术融合方向分析 | 实在RPA研究

随着数字化转型的加速&#xff0c;企业正寻求更高效、智能的方法来优化业务流程。机器人流程自动化&#xff08;RPA&#xff09;作为一种快速兴起的技术&#xff0c;已经证明了其在自动化重复性任务方面的能力。然而&#xff0c;当RPA与各种人工智能&#xff08;AI&#xff09;…

外部时钟传送带测量装置

外部时钟&传送带测量装置 1.外部时钟介绍2.循迹模块3.实操过程1.设置2.代码3.效果 链接: keysking-17 1.外部时钟介绍 将GPIO的外部电平接入即可对外部信号进行计数(PS&#xff1a;上面的内部时钟不是所谓的“高速内部时钟”&#xff0c;而是APB1的定时器分支)。当然,GPIO…

zabbix“专家坐诊”第250期问答

问题一 Q&#xff1a;乐维监控社区版监控交换机&#xff0c;能统计出端口的IP流量排名吗&#xff1f; A&#xff1a;社区版没有这个功能 &#xff0c;正式版&#xff0c;流量报表可以实现端口IP流量排行。 问题二 Q&#xff1a;我看了一下乐维有事件平台汇总的功能&#xff0…

浅谈逻辑控制器插件之jp@gc - Parameterized Controller

浅谈逻辑控制器插件之jpgc - Parameterized Controller jpgc - Parameterized Controller是JMeter的一个强大插件&#xff0c;由JMeter Plugins项目提供。此插件允许用户以更加灵活和动态的方式控制测试计划中的采样器执行逻辑。它通过引入参数化概念&#xff0c;使得单个控制…

【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)

第四届电气工程与计算机技术国际学术会议&#xff08;ICEECT2024&#xff09; 2024 4th International Conference on Electrical Engineering and Computer Technology 第四届电气工程与计算机技术国际学术会议&#xff08;ICEECT2024&#xff09;将于9月27日-29日在哈尔滨举…

汇编语言入门基础(概述)

目录 概述: 1.1 汇编语言与汇编指令 1.2 汇编语言编写程序的工作过程 1.3 数据的表示 1.4 计算机中的存储单元 1.5 计算机中的总线 1.5.1 三种总线 1.5.2 x86CPU性能一览 1.6 内存的读写与地址空间 1.6.1 CPU对存储器的读写 1.6.2 内存地址空间 1.6.3 内存地址空间…

linux虚拟机设置固定ip

修改/etc/sysconfig/network-scripts目录下ifcfg-eth0文件&#xff0c;各虚拟机这个文件名不一致&#xff0c;ifcfg-XX格式 vim /etc/sysconfig/network-scripts/ifcfg-eth0BOOTPROTO设置为static&#xff0c;然后在最后添加固定IP地址和默认网关、DNS等配置&#xff0c;IP地址…

学习笔记 韩顺平 零基础30天学会Java(2024.8.5)

P460 八大Wrapper类 黄色的父类是number&#xff0c;黑色的是自己独立的 P461 装箱和拆箱 手动装箱示例&#xff1a; int n1 100; Interger interger new Interger(n1);//或者&#xff1a;Interger interger Interger.valueOf(n1); 手动拆箱示例&#xff1a; int i interge…

SSM项目学习:用xml配置文件或注解开发实现控制反转和依赖注入

什么是SSM SSMSpring(Spring Framework)Spring MVC mybatis Spring Framework系统架构 Spring Framework学习线路 IoC(Inversion of Control)和DI(Dependency Injection) 他们解决的问题&#xff1a;代码耦合度高的问题&#xff0c;需要类自己new对象&#xff0c;修改部分代…

洗牌算法 和 杨辉三角

目录 一、洗牌算法 1.1 Poker 1.2 PokerBox 1.3 Test 二、杨辉三角 一、洗牌算法 【业务需求】&#xff1a; 第一步&#xff1a;生成52张牌&#xff0c;没有大小王&#xff0c;一共四种花色({"♠", "♥", "♣", "♦")&#xff0c…

爬虫中使用多进程、多线程的混合方式遇到的数据丢失问题

项目场景&#xff1a; 网络爬虫项目&#xff0c;主要实现多进程、多线程方式快速缓存网页资源到MongoDB&#xff0c;并解析网页数据&#xff0c;将信息写入到csv文件中。 问题描述 在单独使用多线程的过程中&#xff0c;是没有问题的&#xff0c;比如这个爬虫示例是爬取豆瓣电…

成都云飞浩容文化传媒有限公司共绘电商服务新蓝图

在这个日新月异的电商时代&#xff0c;每一家企业都渴望在浩瀚的互联网海洋中脱颖而出&#xff0c;实现品牌的飞跃式增长。而在这场没有硝烟的战争中&#xff0c;专业的电商服务成为了企业破局的关键。成都云飞浩容文化传媒有限公司&#xff0c;作为电商服务领域的佼佼者&#…

(ABC三题完整内容)2024年华数杯大学生数学建模竞赛解题思路完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

【mars3d】加载超图s3m模型说明

建议替换Cesium库&#xff0c;换成 超图版本Cesium mars3d mars3d-supermap &#xff0c;需要引入的资源为&#xff1a; "mars3d": ["Cesium-supermap/Widgets/widgets.css", //超图版本Cesium "Cesium-supermap/Cesium.js","mars3d/plu…

vue使用响应式API和页面组件ref相同名称问题

最近在使用vue3vite学习前端的东西。在学习form表单时发现&#xff0c;<el-form>里面的<el-input>绑定数据时&#xff0c;页面输入框在键盘输入之后没有反应&#xff0c;每次只能输入一各字母。 <template><div class"login-container"><…

电子产品CE认证标准以及欧盟需要做的认证有哪些?

​一、家电产品GB质检报告测试内容有哪些&#xff1f; 1.家用电器的测试内容包括预检测和测试 预检测是指在测试之前判定产品是否符合标准要求的检查&#xff0c;主要包括以下三个方面&#xff1a; 1.1产品铭牌、使用的标志、说明书检查 1.2产品的外观及内部结构检查 1.3产品…

Java程序员接单分享

作为一名Java程序员&#xff0c;这阵子通过承接些小型项目&#xff0c;我顺利跨过了月薪破万的门槛。这些项目虽小&#xff0c;却如同磨刀石般&#xff0c;让我在实战中发现了自身技术栈的棱角与不足&#xff0c;尤其是意识到了在Java这一浩瀚技术海洋中的诸多未知领域。我深知…

Python 爬虫项目实战(六):爬取大众点评商家数据

前言 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;也称为网页蜘蛛&#xff08;Web Spider&#xff09;或网页机器人&#xff08;Web Bot&#xff09;&#xff0c;是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…

开放式耳机有哪些优缺点,2024年开放式耳机推荐

&#xff08;一&#xff09;开放式耳机有哪些优缺点 优点&#xff1a;良好的音质&#xff0c;佩戴舒适不伤害耳朵&#xff0c;便于携带&#xff0c;一句话就是舒适又安全&#xff1b; 缺点&#xff1a;最大的缺点就是隔音效果不佳&#xff0c;而且很大的可能性会出现漏音现象…