实训经验分享day15

一、课前分享/*------------------------------------------------------*/

早:
浮点数


中:
this的发明
简化自己给自己赋值的传参步骤
new的第二步需要this
成员代码块在构造器调用时只会加入在最深层的构造器中。

SVM
线性和非线性


晚:
nextInt()
undo与redo,安全模式下可以恢复原点()

PCA-降维算法

二、上课内容/*------------------------------------------------------*/

上午:
    继承 : 子承父业
    多个实体类中存在很多重复的(属性,功能),提高代码复用性

    为什么使用继承 :
        为了提高代码的复用性

    如何使用继承 :
        父类|基类|超类 : 子类的共性(属性,共性)
        子类|派生类 : 对象的共性

        子类 extends 父类

    注意 :
        单继承机制,一个子类只能存在一个直接父类,但是一个父类可以存在多个子类
            优点 : 简化结构,使用简单
            缺点 :  不灵活,不便于后期维护
        子类一旦继承父类,有权使用父类的成员

        extends 延续+扩展


        访问权限修饰符 :
        都是成员修饰符,只能修饰成员,不能修饰局部的成员修饰符

    注意 :
        能够修饰的类的访问权限修饰符 : public | default
        最常用的访问权限修饰符 : public  |  private
        面相 对象设计原则之一 : 开闭原则 对修改关闭,对扩展开放
 
    重载与重写之间的区别 :  *****
       共同点 : 都是方法的特性
       不同点 :
        重载 Overload :
            1.一个类中的多个方法
            2.方法名相同
            3.参数列表不同|方法签名不同
        重写 Override :
            1.两个类中的两个方法
            2.继承|实现关系
            3.方法签名完全相同

 

    使用重写的前提 :
        当子类从父类中继承了功能,功能满意,功能实现不满意的时候,可以在子类中对这个继承的功能重新实现-->重写

    调用 :
        如果子类中存在重写方法,会调用子类中重写的方法,对父类中被重写的方法进行屏蔽

    检测方法是否是重写方法 :
        1.在重写方法的行号的后面存在提示显示   O↑
        2.强制检测一个方法是否为重写方法
            @Override

    不能被重写的方法 :
        1.private修饰的方法不能被重写
            私有方法可以被继承,但是无权访问
        2.被final修饰的方法不能被重写
        3.静态方法不能被重写
            如果子类中存在于父类静态方法同名的方法,要求子类中的这个方法也要为静态的

    重写的实现要求 : ==  <=  >=
        1.==方法签名完全相等
        2.<=  返回值类型
            基本数据类型|void : 重写方法的返回值类型 == 被重写方法的返回值类型
            引用数据类型 : 重写方法的返回值类型<=被重写方法的返回值类型
        3.>=  重写方法的访问权限修饰符>=被重写方法的访问权限修饰符

final : 最终的
        被final修饰的变量为常量
        被final修饰的方法不能被重写
        被final修饰的不能被继承(太监类)


三、代码练习/*------------------------------------------------------*/

今天将的有继承,权限修饰符,super关键字,final关键字等等,没什么典型的练习。晚自习敲代码的时候自己练习了加密,解密,双色球彩票和文字战斗游戏,还比较有意思,分享给大家^_^

加密,解密

package youjixian01a.com.treepomelo.basepractice;

public class Encription {
    public static void main(String[] args) {

        /**
         * 需求:
         * ●某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
         * 规则如下:
         * 先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
         * */
        int n = 198351;
        int count = 1;
        int temp = n;
        while(temp>10){
            temp/=10;
            count++;
        }
        int[] a = new int[count];
        //得到每位数
        for (int i = 0; i < count; i++) {
            a[i]=n%10;
            n/=10;
        }
        //每位数都加上5
        //对10求余
        for (int i = 0; i < count; i++) {
            a[i]+=5;
            a[i]%=10;
        }
        //将所有数字反转
        for (int i = 0;i<count; i++) {
            System.out.print(a[i]);
        }
        System.out.println();

        //将数组转换为字符串,再转换为整数
        String str = "";
        for (int i = 0;i<count; i++) {
            str+=a[i];
        }
        n = Integer.valueOf(str);


        //解密
        Deciphering.deciphering(n);
    }

}
class Deciphering{
    static void deciphering(int n){
        int count = 1;
        int temp = n;
        while(temp>10){
            temp/=10;
            count++;
        }
        int[] a = new int[count];
        //得到每位数
        for (int i = 0; i < count; i++) {
            a[i]=n%10;
            n/=10;
        }
        //大于等于5时-5,否则+5
        for (int i = 0; i < count; i++) {
            if(a[i]>=5)
                a[i]-=5;
            else
                a[i]+=5;
        }
        //将所有数字反转
        for (int i = 0;i<count; i++) {
            System.out.print(a[i]);
        }

    }
}

双色球彩票:

package youjixian01a.com.treepomelo.basepractice;

import java.util.Random;
import java.util.Scanner;

import static youjixian01a.com.treepomelo.basepractice.Snatch.exist;

/**
 * 投注号码由6个红色球号码和1个蓝色
 * 球号码组成。红色球号码从1一33中选
 * 择;蓝色球号码从1一16中选择。
 * 双色球中奖条件和奖金表*/
public class RedBlueBall {
    public static void main(String[] args) {
        //生成中奖号码
        int[] arr = creatNumber();
//        for (int i : arr) {
//            System.out.print(i+" ");
//        }
        //System.out.println();
        //用户输入号码
        //红球
        int[] user = new int[7];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < user.length-1;) {
            System.out.print("请输入第"+(i+1)+"个红球号码:");
            int temp = sc.nextInt();
            //判断是否在范围内
            if(temp>=1&&temp<=33)
                //判断是否重复
            {
                if(!exist(user,temp))
                    user[i++] = temp;
                else
                    System.out.println("您输入的红球号码重复...");
            }
            else
                System.out.println("您输入的红球号码超出范围...");

        }
        //蓝球
        while(true){
            System.out.println("请输入蓝球号码:");
            int temp = sc.nextInt();
            if (temp >= 1 && temp <= 16)
            {
                user[user.length - 1] = temp;
                break;
            }
            else
                System.out.println("您输入的蓝球号码超出范围...");
        }
        //判断中奖情况
        int redCount = 0;
        int blueCount = 0;
        for (int i = 0 ;i<user.length-1;i++) {
            if(exist(arr,i))
                redCount++;
        }
        if(user[user.length-1]==arr[arr.length-1])
            blueCount++;
        System.out.println("红球中了"+redCount+"个");
        System.out.println("蓝球中了"+blueCount+"个");

        //判断出奖金金额(略)
    }

    private static int[] creatNumber() {
        //redball
        int[] a = new int[7];
        Random r = new Random();
        for (int i = 0; i < a.length-1;) {
            //从1~33中抽取号码
            int temp = r.nextInt(33)+1;
            //号码不存在,插入red中
            if(!exist(a,temp)){
                a[i++] = temp;
            }
        }
        //blueball
        a[a.length-1] = r.nextInt(16)+1;
        return a;
    }
}

文字战斗游戏

package youjixian01a.com.treepomelo.basepractice;

import java.util.Random;

/**
 * 容颜:
 * String0 boyfaces="风流俊雅","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂",面目狰狞"
 * String[]girlfaces="美奂绝伦","沉鱼落雁","婷婷玉立","身材娇好","相貌平平","相貌简陋","惨不忍睹":
 *
 * attack攻击描述:
 * String[]attacks_desc={
 * "%5使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍
 * "%5使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%5。",
 * "%5大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
 * "%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%5。",
 * "%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%5。",
 * "%5上步抢身,招中套招,一招【劈挂连环】,连环攻向%5。"
 * }:
 * njured受伤描述:
 * String[]injureds_desc=[
 * "结果%s退了半步,毫发无损",
 * "结果给%s造成一处瘀伤",
 * "结果一击命中,%S痛得弯下腰",
 * "结果%5痛苦地闷哼了一声,显然受了点内伤",
 * "结果%S摇摇晃晃,一跤摔倒在地",
 * "结果%s脸色,一下变得惨白,连退了好几步",
 * "结果『轰』的一声,%s口中鲜血狂喷而出",
 * "结果%5一声惨叫,像滩软泥般塌了下去”*/
public class Fight {
    public static void main(String[] args) throws InterruptedException {
        //创建人物
        Bean b1 = new Bean("令狐冲",100,1);
        Bean b2 = new Bean("赵敏",100,0);

        //fight
        while(true){
            //判断速度(略)
            b1.attack(b2);
            if(b2.getBlood()<=0)
                break;
            Thread.sleep(1000);
            b2.attack(b1);
            if(b1.getBlood()<=0)
                break;
            Thread.sleep(1000);
        }

    }
}
class Bean{
    private String name;
    private int blood;
    private int sex;//1为男,2为女

    public Bean() {
    }

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

    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 int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }


    //status
    static String[] boyfaces={"风流俊雅","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂","面目狰狞"};//7
    static String[] girlfaces={"美奂绝伦","沉鱼落雁","婷婷玉立","身材娇好","相貌平平","相貌简陋","惨不忍睹"};//7

    static String[]attacks_desc={
            "使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍",
            "使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
            "大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
            "运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。",
            "阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。",
            "上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。",
    };//6
    static String[]injureds_desc= {
            "结果%s退了半步,毫发无损",
            "结果给%s造成一处瘀伤",
            "结果一击命中,%s痛得弯下腰",
            "结果%s痛苦地闷哼了一声,显然受了点内伤",
            "结果%s摇摇晃晃,一跤摔倒在地",
            "结果%s脸色,一下变得惨白,连退了好几步",
            "结果『轰』的一声,%s口中鲜血狂喷而出",
            "结果%s一声惨叫,像滩软泥般塌了下去"};//8

    public void attack(Bean b){
        Random r = new Random();
        int power = r.nextInt(20)+1;
        String str = this.getName();
        String status = "";
        if(this.getSex()==1)
            status = boyfaces[r.nextInt(boyfaces.length)];
        else
            status = girlfaces[r.nextInt(girlfaces.length)];
        str+=status;

        System.out.printf(str+","+attacks_desc[r.nextInt(attacks_desc.length - 1)],b.getName());


        int remain = b.getBlood()-power;
        b.setBlood(remain);
        if(remain>=90)
            System.out.printf(injureds_desc[0],b.getName());
        else if(remain>=80)
            System.out.printf(injureds_desc[1],b.getName());
        else if(remain>=70)
            System.out.printf(injureds_desc[2],b.getName());
        else if(remain>=60)
            System.out.printf(injureds_desc[3],b.getName());
        else if(remain>=40)
            System.out.printf(injureds_desc[4],b.getName());
        else if(remain>=30)
            System.out.printf(injureds_desc[5],b.getName());
        else if(remain>=10)
            System.out.printf(injureds_desc[6],b.getName());
        else if(remain<=0)
            System.out.printf(injureds_desc[7],b.getName());
        System.out.println();

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值