面向对象综合训练-01-文字版格斗游戏
 

public class GameTest {
    public static void main(String[] args) {
        //1.创建第一个角色
        user r1 = new user("爹", 100, '男');
        //2.创建第二个角色
        user r2 = new user("冯", 100, '?');

        //展示角色信息
        r1.showRoleInfo();
        r2.showRoleInfo();

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

public class user {
    //属性
    private String name;
    private int blood;
    private char gender;
    private String face;//长相随机

    String[] boyfaces = {"风流俊雅", "气宇轩昂", "五官端正", "一塌糊涂", "面目狰狞"};
    String[] girlfaces = {"美奂绝伦", "沉鱼落雁", "婷婷玉立", "身材娇好"};

    //构造方法
    public user() {
    }

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

    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 == '男') {//从boyface里随机长相
            int index = r.nextInt(boyfaces.length);
            this.face = boyfaces[index];
        } else if (gender == '?' || gender == '女') {
            int index = r.nextInt(girlfaces.length);
            this.face = girlfaces[index];
        } else {
            this.face = "面目狰狞";
        }
    }

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

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


    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;
    }

    //定义方法用于攻击别人
    //思考:谁攻击谁>
    //user r1=new user();
    //user r2=new user();
    //r1攻击(r2);
    //方法的调用者攻击参数
    public void attack(user 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();//换行效果
        //计算造成的伤害 1~20
        int hurt = r.nextInt(20) + 1;//1-20

        //修改挨揍的人的剩余血量
        int remainBoold = role.getBlood() - hurt;
        //对剩余血量验证 负数修改为0
        remainBoold = remainBoold < 0 ? 0 : remainBoold;
        //修改剩余血量
        role.setBlood(remainBoold);

        //受伤描述  分八层
        if (remainBoold > 90) {
            System.out.printf(injureds_desc[0], role.getName());
        } else if (remainBoold > 80 && remainBoold <= 90) {
            System.out.printf(injureds_desc[1], role.getName());
        } else if (remainBoold > 70 && remainBoold <= 80) {
            System.out.printf(injureds_desc[2], role.getName());
        } else if (remainBoold > 60 && remainBoold <= 70) {
            System.out.printf(injureds_desc[3], role.getName());
        } else if (remainBoold > 40 && remainBoold <= 60) {
            System.out.printf(injureds_desc[4], role.getName());
        } else if (remainBoold > 20 && remainBoold <= 40) {
            System.out.printf(injureds_desc[5], role.getName());
        } else if (remainBoold > 10 && remainBoold <= 20) {
            System.out.printf(injureds_desc[6], role.getName());
        } else {
            System.out.printf(injureds_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());
    }
}

面向对象综合训练-02-两个对象数组练习

java如何实现角色对模块管理 java角色扮演_深度学习

java如何实现角色对模块管理 java角色扮演_字符串_02

nextInt()/next(); 一直接收键盘录入值 第二次没录入 直接输出第一次剩下的东西  
两套体系不能混用

day10 API&字符串

字符串-01-API和API帮助文档

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_03

java如何实现角色对模块管理 java角色扮演_Java_04

java如何实现角色对模块管理 java角色扮演_Java_05

字符串-02-String概述

java如何实现角色对模块管理 java角色扮演_字符串_06

字符串-03-String构造方法代码实现和内存分析

java如何实现角色对模块管理 java角色扮演_System_07

java如何实现角色对模块管理 java角色扮演_深度学习_08

java如何实现角色对模块管理 java角色扮演_字符串_09

java如何实现角色对模块管理 java角色扮演_深度学习_10

java如何实现角色对模块管理 java角色扮演_字符串_11

所以 直接赋值 节约内存   而new是新地址

java如何实现角色对模块管理 java角色扮演_System_12

字符串-04-字符串的比较

java如何实现角色对模块管理 java角色扮演_字符串_13

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_14

java如何实现角色对模块管理 java角色扮演_字符串_15

java如何实现角色对模块管理 java角色扮演_深度学习_16

字符串-05-练习-用户登录

字符串-06-练习-遍历字符串和统计字符个数

java如何实现角色对模块管理 java角色扮演_字符串_17

import java.util.Scanner;

public class StringDemo {
    public static void main(String[] args) {
        //1.键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        //2.进行遍历
        for (int i = 0; i < str.length(); i++) {
            //i 依次表示字符中的每一个索引
            char c = str.charAt(i);
            System.out.println(c);

        }
    }
}

char类型的变量在参与计算的时候自动类型提升为int 在ASCII表中比较

字符串-07-练习-字符串拼接和反转

java如何实现角色对模块管理 java角色扮演_System_18

java如何实现角色对模块管理 java角色扮演_深度学习_19

字符串-08-较难练习-金额转换

import java.util.Scanner;

public class stringmoney {
    public static void main(String[] args) {
        //1.键盘录入一个金额
        Scanner sc = new Scanner(System.in);
        int money;
        while (true) {
            System.out.println("请录入一个金额");
            money = sc.nextInt();
            if (money >= 0 && money <= 9999999) {
                break;
            } else {
                System.out.println("金额无效");
            }
        }
        //定义一个变量表示钱的大写
        String moneyStr = "";

        //2.得到money中的每一位数字,再转成中文
        while (true) {
            int ge = money % 10;
            String capitalNumber = getCapitalNumber(ge);
            //吧转换之后的大写拼接
            moneyStr = capitalNumber + moneyStr;

            money /= 10;

            if (money == 0) {
                break;
            }
        }
        //3.补齐7位,前面补0
        int count = 7 - moneyStr.length();
        for (int i = 0; i < count; i++) {
            moneyStr = "零" + moneyStr;
        }

        //4.插入金额单位  定义数组表示单位
        String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};

        String result = "";
        for (int i = 0; i < moneyStr.length(); i++) {
            char c = moneyStr.charAt(i);
            result += (c + arr[i]);
        }
        System.out.print(result);
    }
    //定义一个方法 把数字变成大写的中文
    public static String getCapitalNumber(int number) {
        //定义数组 让数字跟大写的中文产生对应关系
        String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        return arr[number];
    }
}

字符串-09-练习-手机号屏蔽-身份证号码信息查看-游戏骂人敏感词替换

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_20

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_21

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_22

public class stringmoney {
    public static void main(String[] args) {
        //1.获取到说的话
        String talk = "你玩的真好,TMD,CNM";

        //2.定义敏感词库
        String[] arr = {"TMD", "CNM", "SB", "MLGB"};

        //3.循环得到数组中的每个敏感词,依次进行替换
        for (int i = 0; i < arr.length; i++) {
            talk = talk.replace(arr[i], "***");
        }

        //4.打印结果
        System.out.println(talk);

    }

}

java如何实现角色对模块管理 java角色扮演_深度学习_23

字符串-10-StringBuilder的基本操作

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_24

java如何实现角色对模块管理 java角色扮演_深度学习_25

java如何实现角色对模块管理 java角色扮演_System_26

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_27

链式编程!

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_28

使用stringBuilder的场景:  字符串拼接,字符串反转

java如何实现角色对模块管理 java角色扮演_字符串_29

import java.util.Scanner;

public class stringmoney {
    public static void main(String[] args) {
        //1.键盘录入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();

        //2.反转键盘录入的字符串
        String result = new StringBuilder().append(str).reverse().toString();

        //3.比较
        if (str.equals(result)) {
            System.out.println("当前字符串是对称字符串");
        } else {
            System.out.println("当前字符串不是对称字符串");
        }

    }

}

java如何实现角色对模块管理 java角色扮演_字符串_30

字符串-11-Stringjoiner

java如何实现角色对模块管理 java角色扮演_System_31

java如何实现角色对模块管理 java角色扮演_字符串_32

java如何实现角色对模块管理 java角色扮演_Java_33

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_34

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_35

java如何实现角色对模块管理 java角色扮演_Java_36

字符串-12-字符串相关类的底层原理 

java如何实现角色对模块管理 java角色扮演_Java_37

(等号右边 两种情况)

java如何实现角色对模块管理 java角色扮演_Java_38

java如何实现角色对模块管理 java角色扮演_System_39

java如何实现角色对模块管理 java角色扮演_java如何实现角色对模块管理_40

java如何实现角色对模块管理 java角色扮演_System_41

用stringBuilder或joiner

java如何实现角色对模块管理 java角色扮演_字符串_42

!

java如何实现角色对模块管理 java角色扮演_System_43

java如何实现角色对模块管理 java角色扮演_Java_44

java如何实现角色对模块管理 java角色扮演_System_45

java如何实现角色对模块管理 java角色扮演_字符串_46

长度是实际放了多少;容量是最多放多少  超过容量的时候会:  stringBuilder扩容:2*容量+2

字符串-13-较难练习-罗马数字的两种写法
字符串-14-较难练习-调整字符串的内容并比较

修改字符串内容:  1.subString截取  2.变成字符数组str.toCharArray();

java如何实现角色对模块管理 java角色扮演_字符串_47

java如何实现角色对模块管理 java角色扮演_字符串_48

字符串-15-后续练习思路分析

java如何实现角色对模块管理 java角色扮演_Java_49

java如何实现角色对模块管理 java角色扮演_Java_50

java如何实现角色对模块管理 java角色扮演_深度学习_51

倒着遍历!!!

## 题目8(扩展)

在String类的API中,有如下两个方法:

```java
// 查找参数字符串str在调用方法的字符串中第一次出现的索引,如果不存在,返回-1
public int indexOf(String str)

// 截取字符串,从索引beginIndex(包含)开始到字符串的结尾
public String substring(int beginIndex)
```

请仔细阅读API中这两个方法的解释,完成如下需求。

现有如下文本:"Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的"。
请编写程序,统计该文本中"Java"一词出现的次数。

### 训练目标

String类API的灵活使用

### 参考答案1


public class Test {
    public static void main(String[] args) {
        String str = "Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的";
        String tar = "Java";
        // 调用方法并输出
        System.out.println(search(str, tar));

    }
    // 返回值int表示次数,参数列表str表示在哪个字符串中查找,tar表示要查找的目标子串
    public static int search(String str, String tar) {
        // 定义统计变量表示次数
        int count = 0;
        // 定义索引变量,表示每次找到子串出现的索引
        int index = -1;
        // 定义循环,判断条件为在字符串中找到了目标子串
        while ((index = str.indexOf(tar)) != -1) { // 将找到的索引赋值给变量并判断
            // 次数累加
            count++;
            // 把查找过的部分剪切掉,从找到的索引+子串长度的位置开始截取。
            str = str.substring(index + tar.length());
        }
        return count;
    }
}

### 参考答案2

public class Test {
    public static void main(String[] args) {
        String str = "Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的";
        String tar = "Java";
        // 调用方法并输出
        System.out.println(search(str, tar));

    }

    // 替换之后求长度差
    public static int search(String str, String tar) {
        String newStr = str.replace(tar, "");
        int count = (str.length() - newStr.length()) / tar.length();
        return count;

    }
}