一、数组的排序
对数组中的数字按照从小到大或从大到小进行排序
在不断的发展设计中逐步演练出排序的方式方法,称为排序算法
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-Nt3gtbcH-1657284617496)(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-I8XvXCNg-1657284617497)(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);
}
}