IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数组的排序面向对象类对象0708 -> 正文阅读

[数据结构与算法]数组的排序面向对象类对象0708

一、数组的排序

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

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

1、排序算法

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

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

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

2、冒泡排序算法

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

	int[]arr = {6,4,2,5,3,1};//要排序的数组
    /*
    j=0(元素的下标/索引)
    j和j+1比较(永远都是和相邻的元素进行比较)
    
    0-1 1-2 2-3 3-4 4-5
    0-1 1-2 2-3 3-4
    0-1 1-2 2-3
    0-1 1-2
    0-1
    
    -左侧是j,j的范围:0-4
     */
    //通过分析,发现需要比较length-1
    for (int i = 0; i < arr.length-1; i++) {
        for (int j = 0; j < arr.length-1-i; j++) {
            //比较
            System.out.print(j+"-"+(j+1)+" ");
            if(arr[j]>arr[j+1]){
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        System.out.println();
    }

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

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

3、选择排序算法

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

		int[]arr = {6,4,2,5,3,1};
        /*
        i=0;拿i和后面的1 2 3 4 5进行比较
        0 - 1 2 3 4 5
        1 - 2 3 4 5
        2 - 3 4 5
        3 - 4 5
        4 - 5
         */
        //i : 0-length-1
        for (int i = 0; i < arr.length-1; i++) {
            System.out.print(i+" - ");
            //j : i-length-1
            for (int j = i+1; j < arr.length; j++) {
                System.out.print(j+" ");
                if(arr[i]>arr[j]){
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
            System.out.println();
        }

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

二、面向对象

万物皆对象

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

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

1、面向过程

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

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

2、面向对象

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y9TX6TW4-1657796773123)(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.print("我叫"+name+",是一个"+type);
        System.out.println(",生命值高达"+life+",防御值"+defense+",攻击力"+attack);
    }

    /**
     * 我方开启的战斗
     * @param p 敌对玩家
     */
    public void pk(Player p){
        //定义一个标记,0我方攻击 1敌方攻击
        int flag = 0;//默认我方先攻击

        //回合制,直到一方死亡停止
        while(true){
            //显示一下当前战斗人员的信息
            this.say();
            p.say();

            if(flag==0){
                //战斗 我方攻击力-敌方防御力=伤害值
                int harm = this.attack-p.defense;
                System.out.println(p.name+"掉血"+harm);
                p.life-=harm; //让敌方生命值-伤害值

                flag=1 ;//改变标记,转换攻击角色
            }else{
                //战斗 敌方攻击力-我方防御力=伤害值
                int harm = p.attack-this.defense;
                System.out.println(this.name+"掉血"+harm);
                this.life-=harm; //让我方生命值-伤害值

                flag=0 ;//改变标记,转换攻击角色
            }
            //有血量<=0,战斗结束
            if(this.life<=0){
                System.out.println(p.name+"打败了"+this.name);
                break;//结束循环
            }
            if(p.life<=0){
                System.out.println(this.name+"打败了"+p.name);
                break;//结束循环
            }

            //线程休眠
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    //构造器(建议如果定义了有参的构造器,一定定义一个无参构造器)
    public Player() {
    }
    public Player(String name, String type, int life, int defense, int attack) {
        this.name = name;
        this.type = type;
        this.life = life;
        this.defense = defense;
        this.attack = attack;
    }

   	//get和set方法 省略
}

测试类

/**
 * 测试玩家类
 *  创建玩家对象pk
 */
public class PlayerTest {
    public static void main(String[] args) {
        //创建两个玩家对象
        Player p1 = new Player("龙傲天", "战士", 100, 20, 30);
        Player p2 = new Player("赵日天", "法师", 70, 12, 45);

        //战斗
        p1.pk(p2);
    }
}

结果演示

我叫龙傲天,是一个战士,生命值高达100,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达70,防御值12,攻击力45
赵日天掉血18
我叫龙傲天,是一个战士,生命值高达100,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达52,防御值12,攻击力45
龙傲天掉血25
我叫龙傲天,是一个战士,生命值高达75,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达52,防御值12,攻击力45
赵日天掉血18
我叫龙傲天,是一个战士,生命值高达75,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达34,防御值12,攻击力45
龙傲天掉血25
我叫龙傲天,是一个战士,生命值高达50,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达34,防御值12,攻击力45
赵日天掉血18
我叫龙傲天,是一个战士,生命值高达50,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达16,防御值12,攻击力45
龙傲天掉血25
我叫龙傲天,是一个战士,生命值高达25,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达16,防御值12,攻击力45
赵日天掉血18
龙傲天打败了赵日天

是一个法师,生命值高达52,防御值12,攻击力45
赵日天掉血18
我叫龙傲天,是一个战士,生命值高达75,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达34,防御值12,攻击力45
龙傲天掉血25
我叫龙傲天,是一个战士,生命值高达50,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达34,防御值12,攻击力45
赵日天掉血18
我叫龙傲天,是一个战士,生命值高达50,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达16,防御值12,攻击力45
龙傲天掉血25
我叫龙傲天,是一个战士,生命值高达25,防御值20,攻击力30
我叫赵日天,是一个法师,生命值高达16,防御值12,攻击力45
赵日天掉血18
龙傲天打败了赵日天


  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:48:39  更:2022-07-17 16:51:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:22:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码