Java day09面向对象综合训练 day10 API&字符串

面向对象综合训练-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-两个对象数组练习

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


day10 API&字符串

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

字符串-02-String概述

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

所以 直接赋值 节约内存   而new是新地址字符串-04-字符串的比较


字符串-05-练习-用户登录
字符串-06-练习-遍历字符串和统计字符个数

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-练习-字符串拼接和反转

字符串-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-练习-手机号屏蔽-身份证号码信息查看-游戏骂人敏感词替换

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

    }

}

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


链式编程!
使用stringBuilder的场景:  字符串拼接,字符串反转

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("当前字符串不是对称字符串");
        }

    }

}

字符串-11-Stringjoiner



字符串-12-字符串相关类的底层原理 
(等号右边 两种情况)


用stringBuilder或joiner
!

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

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

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

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

倒着遍历!!!


## 题目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;

    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第四章 类和对象 [习题] 1.类及类成员的访问控制符有哪些? 2.为什么说构造函数是一种特殊的方法?特殊在哪里?构造函数什么时候执行?被谁调 用? 3.关键字static可以修饰哪些类的组成部分? 4.静态属性有什么特点?类对象可以访问或修改静态属性吗? 5.同名的不同方法共存的情况称为什么?如何区分这些同名方法? 6.什么是包?如何创立包?为什么要使用包?包物理地对应什么? 7.试写出一个语句创立一个名为MyPackage的包,这个语句应该放在程序的什么位置 ? 8.如何引用整个包?如何引用包中的一个类?试写出引用MyPackage中所有类的语句和 引用MyPackage包中的一个类MyClass1。 9.阅读下面的程序,说明它们的输出。 public class UseRef{ public static void main(String args[]){ MyClass1 myobj,myref; myobj=new MyClass1(-1); myref=myobj; "+myobj.getData()); myref.setData(10); } } class MyClass1{ int data; MyClass1(int d){ data=d; } int getData(){ return data; } void setData(int d){ data=d; } } 10.编写一个类实现秒表的功能。要求至少实现开始计时、停顿计时、分针秒针归零 、获得分针示数、获得秒针示数、获得总时间的毫秒数等功能。 11.编写一个类实现复数的运算。要求至少实现复数相加、复数相减、复数相乘等功 能。 12.编程创立一个Box类,在其中定义三个变量表示一个立方体的长、宽和高,定义 一个构造方法对这三个变量进展初始化,然后定义一个方法求立方体的体积。创立一个 对象,求给定尺寸的立方体的体积。 13.定义一个学生类〔Student〕,属性包括:学号,班号,姓名,性别,年龄,班 级总人数;方法包括:获得学号,获得班号,获得姓名,获得性别,获得年龄,获得班 级总人数,修改学号,修改班号,修改姓名,修改性别,修改年龄以及一个toString() 方法将Student类中的所有属性组合成一个字符串。定义一个学生数组对象。设计程序进 展测试。 14.定义一个学生类和一个课程类,要求可以表示现实生活中一个学生可以选择多门 课程的情况。编写程序进展测试。 ----------------------- java面向对象程序设计习题-(11)全文共2页,当前为第1页。 java面向对象程序设计习题-(11)全文共2页,当前为第2页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软工菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值