数组的排序面向对象类对象0708

本文介绍了两种经典的排序算法——冒泡排序和选择排序,详细解析了它们的实现原理和步骤。同时,深入探讨了面向对象编程的概念,通过实例展示了如何将面向过程的思维转化为面向对象的设计,强调了类和对象在程序设计中的重要性,并通过玩家类的创建和战斗模拟展示了类的定义和对象的使用。
摘要由CSDN通过智能技术生成

一、数组的排序

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

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

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
龙傲天打败了赵日天


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值