1.课堂笔记

本文介绍了两种基本的排序算法——冒泡排序和选择排序,并详细解释了它们的实现原理。接着,文章探讨了面向对象编程的概念,通过实例展示了如何在Java中创建类和对象。最后,给出了一个玩家类的示例,展示了类如何用于模拟战斗场景。
摘要由CSDN通过智能技术生成

一、数组的排序

对数组中的数字按照从小到大或从大到小进行排序

在不断的发展设计中逐步演练出排序的方式方法,称为排序算法

1、排序算法

排序算法有很多种,每一种都有各自排序的规则[算法]

  • 冒泡排序算法
  • 选择排序算法

注意:学习排序算法主要就是认识和理解排序的规则

2、冒泡排序算法

排序规则:相邻的两个元素进行比较

	j=0;//下标
	//j如何跟相邻的元素进行比较?始终是j和j+1比较
	0-1 
    j++; //j=1
	1-2
    ....
		//初始化数组
        int[]arr = {6,4,2,5,3,1};

        //第一轮
        /*
        0-1 1-2 2-3 3-4 4-5
        j是-左边的,范围:0~lengt-1-1
        -右边永远是j+1 (这样就能保证永远都是相邻的元素)
         */
        for (int i = 0; i < arr.length-i; i++) {
            for (int j = 0; j < arr.length-1-i; j++) {
                if(arr[j]>arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

        //遍历数组输出元素
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-84E5cqCm-1657284419226)(Img\mp.png)]

3、选择排序算法

排序规则:每次从头一个元素,依次和后续的元素进行比较(有选择的比较)

/*
规则:
0 - 1 2 3 4 5
1 - 2 3 4 5
2 - 3 4 5
3 - 4 5
4 - 5
-右边是被选择比较的(小的循环周期)
 */
//外部循环循环 - 左边的 0 1 2 3 4
for (int i = 0; i < arr.length-1; i++) {
    //被选择比较的,内部循环循环被选择比较的
    for (int j = i+1; j < arr.length; j++) {
        if(arr[i]>arr[j]){
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}

//遍历数组输出元素
for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i]+"\t");
}

二、面向对象

万物皆对象

以对象为主来设计程序的编程思想

编程思想:面向过程、面向对象

1、面向过程

c面向过程,以过程为主的,执行者身份

问题:吃饭,以面向过程角度,要做饭,买菜,洗菜,炒菜,…

2、面向对象

问题:吃饭,直接找饭店对象

问:把大象装进冰箱需要几步?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkGgkbBG-1657284419227)(E:\DS220701\D0708\Img\bx.png)]

面向过程代码

/**
 * 面向过程 冰箱装大象
 */
public class Demo01 {
    public static void main(String[] args) {
        System.out.println("打开冰箱门");
        System.out.println("把大象装进冰箱");
        System.out.println("关闭冰箱门");
    }
}

面向对象代码

第一步:先设计一个能解决这个问题的冰箱类

/**
 * 冰箱类()
 *  特点:能装大象
 */
public class Fridge {
    //属性
    private String brand;//品牌

    //行为
    public void saveElephant(){
        System.out.println("嗖的一声,冰箱起飞,飞往西双版纳...");
        System.out.println("咔。。装了一头大象");
        System.out.println("嗖的一声,起飞,飞回来了..");
    }
}

第二步:创建对象,使用对象

/**
 * 面向对象 冰箱装大象
 */
public class Demo02 {
    public static void main(String[] args) {
        //问题:需要装大象
        //创建冰箱对象
        Fridge fridge = new Fridge();

        //发命令
        fridge.saveElephant();
    }
}

三、类

类是创建对象的模板,类就是分类、类型

一般程序中设计的类都是对现实世界中事物的抽象,如:

  • 网上商城中的商品类—现实中的商品
  • 医疗管理系统中的病人类、医生类、药品类等等—现实中的病人、医生、药物

类一般理解为两类:

  • 作为数据载体的实体类(对象存数据,存在属性中)
  • 作为功能处理的功能类

类的定义:

	//修饰符 class 类名{
		//属性

		//行为:功能方法

		//构造器
	}

四、对象

对象是类的实例,类似于工厂造锅的模具,锅就是模具的实例

对象的创建

	//使用new关键字,调用指定类的构造器创建对象,并保存到对应类型的变量中
	Goods goods = new Goods();

五、模拟玩家

战斗!!!

/**
 * 玩家类
 *  属性:名字,类型,血量,防御,攻击
 *  行为:自我介绍、pk
 */
public class Player {
    //封装:将属性设为private,提供公共的get和set方法间接访问,提升安全性
    private String name; //玩家名称
    private String type; //玩家类型:战士、法师
    private int life; //生命
    private int defense; //防御
    private int attack; //攻击力

    /**
     * 自我介绍
     */
    public void say(){
        System.out.println("我叫"+name+",是一个"+type+",我的生命值高达"+life+",防御"+defense+",攻击"+attack);
    }

    /**
     * pk的方法,和另一个玩家pk
     * @param p
     */
    public void pk(Player p){//对手

        //回合制pk,直到一方死亡
        while (true){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //每次都显示剩余的生命值
            this.say();
            p.say();

            //定义一个标记,0表示我方进攻,1表示敌方进攻
            int flag = 0;//默认我方先进攻

            if(flag==0){
                //我方进攻: (我方攻击力-敌方防御力)
                int harm = this.attack-p.defense;//得到伤害
                p.setLife(p.life-harm);//敌人掉血
                System.out.println(p.name+"掉血" + harm);
                flag = 1 ; //改变进攻方
            }else{
                //敌方进攻: (敌方攻击力-我方防御力)
                int harm = p.attack-this.defense;//得到伤害
                this.setLife(this.life-harm);//我方掉血
                System.out.println(p.name+"掉血" + harm);
                flag = 0 ; //改变进攻方
            }

            //判别血量
            if(this.life<=0){
                System.out.println(this.name+"被KO了");
                break;//有人倒下,停止战斗
            }
            if(p.life<=0){
                System.out.println(p.name+"被KO了");
                break;//有人倒下,停止战斗
            }

        }
    }
    // get和set 省略
}

测试类:可以多改数据测试

/**
 * 测试使用玩家类
 */
public class PlayerTest {
    public static void main(String[] args) {
        //创建玩家对象
        Player p1 = new Player();
        p1.setName("龙傲天");
        p1.setType("战士");
        p1.setLife(100);
        p1.setDefense(20);
        p1.setAttack(30);

        Player p2 = new Player();
        p2.setName("赵日天");
        p2.setType("法师");
        p2.setLife(60);
        p2.setDefense(10);
        p2.setAttack(50);

        //开始PK
        p1.pk(p2);

    }
}

“战士”);
p1.setLife(100);
p1.setDefense(20);
p1.setAttack(30);

    Player p2 = new Player();
    p2.setName("赵日天");
    p2.setType("法师");
    p2.setLife(60);
    p2.setDefense(10);
    p2.setAttack(50);

    //开始PK
    p1.pk(p2);

}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值