排序和面向对象
1. 冒泡
两两相邻比较 遇到条件成立(大于或者小于)就交换位置 经过作图分析: 比较的轮数是长度-1 外层循环控制比较的轮数 每一轮比较的次数 最多的一次是长度-1 依次递减 内层循环控制比较的次数 外层循环 N - 1 内层循环 N - 1 - i
package com.qfedu.test2;import java.util.Arrays;/*** 冒泡排序* 希尔排序 快速排序 堆排序 桶排序 选择排序 猴子排序** 排序:将乱序的一组数列经过算法 排列为升序或者降序* 冒泡排序:两两相邻比较 遇到条件成立(大于或者小于)就交换位置** 经过作图分析:* 比较的轮数是长度-1 外层循环控制比较的轮数* 每一轮比较的次数 最多的一次是长度-1 依次递减 内层循环控制比较的次数** 外层循环 N - 1* 内层循环 N - 1 - i* @author WHD**/public class Test1 {public static void main(String[] args) {int a = 10;int b = 20;int c = a;a = b;b = c;int [] nums = {20,1,55,784,10,233,65};for(int i = 0;i < nums.length - 1;i++) {for(int j = 0;j < nums.length - 1 - i;j++) {if(nums[j] < nums[j + 1]) {int temp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = temp;}}}System.out.println(Arrays.toString(nums));}}
2. 选择
比较方式:使用一个元素去其他的元素进行比较 遇到需要交换位置的元素 先不交换 等到一轮比较完以后 交换一次位置 比较的次数与冒泡是一样的 但是 交换位置的次数 大大减少了 长度-1 的元素都将充当一遍比较的数A 从第二个元素开始 都将充当一遍比较的数B 外层循环 是比较的数A 内层循环 是比较的数B
package com.qfedu.test3;import java.util.Arrays;/*** 选择排序* 冒泡的方式三个人比高低个:广坤 180 赵四 188 刘能 155** 比较方式:使用一个元素去其他的元素进行比较 遇到需要交换位置的元素* 先不交换 等到一轮比较完以后 交换一次位置* 比较的次数与冒泡是一样的 但是 交换位置的次数 大大减少了** 长度-1 的元素都将充当一遍比较的数A* 从第二个元素开始 都将充当一遍比较的数B* 外层循环 是比较的数A* 内层循环 是比较的数B* @author WHD**/public class Test1 {public static void main(String[] args) {int [] nums = {20,1,55,784,10,233,65};for(int i = 0;i < nums.length - 1;i++) {int minIndex = i;for(int j = i + 1;j < nums.length;j++) {if(nums[minIndex] > nums[j]) {minIndex = j;}}if(minIndex != i) {int temp = nums[minIndex];nums[minIndex] = nums[i];nums[i] = temp;}}System.out.println(Arrays.toString(nums));}}
3.JDK自带排序
JDK自带的排序 升序 Arrays.sort(数组名)
package com.qfedu.test4;import java.util.Arrays;/*** JDK自带的排序* Arrays.sort(数组名)* @author WHD**/public class Test1 {public static void main(String[] args) {int [] nums = {20,1,55,784,10,233,65};Arrays.sort(nums); // 升序//降序int [] newNums = new int[nums.length];for(int i = 0,j = nums.length - 1;i < nums.length;i++,j--) {newNums[i] = nums[j];}System.out.println(Arrays.toString(newNums));System.out.println(Arrays.toString(nums));}}
4. 二维数组
二维数组 数组中的元素还是数组 创建二维数组的方式还跟之前一样 四种
package com.qfedu.test5;/*** 二维数组 数组中的元素还是数组* 我们之前用的都是一维数组* @author WHD**/public class Test1 {public static void main(String[] args) {int [] nums1 = {1,2,3,4,5};// 声明带赋值 简单int [][] nums2 = {{1,2,3}, {4,5,6,7,8,9,5,6,8,6,5,20}, {11,22,33,445} , {89,78,45}};System.out.println(nums2[0][0]);System.out.println(nums2[0][1]);System.out.println(nums2[0][2]);System.out.println(nums2[1][0]);System.out.println(nums2[1][1]);System.out.println(nums2[1][2]);// 声明带赋值 繁琐int [][] nums3 = new int[][] {{1},{2},{3}};// 先声明 再开辟空间int [][] nums4;nums4 = new int[4][];nums4[0] = new int[3];nums4[0][0] = 20;nums4[0][1] = 21;nums4[0][2] = 22;nums4[1] = new int[4];nums4[1][0] = 11;nums4[1][1] = 12;nums4[1][2] = 13;nums4[1][3] = 14;nums4[2] = new int[5];nums4[2][0] = 1;nums4[2][1] = 1;nums4[2][2] = 1;nums4[2][3] = 1;nums4[2][4] = 1;nums4[3] = new int[6];nums4[3][0] = 2;nums4[3][1] = 2;nums4[3][2] = 2;nums4[3][3] = 2;nums4[3][4] = 2;nums4[3][5] = 2;for(int i = 0;i < nums4.length;i++) {// System.out.println(nums4[i]);for(int j = 0;j <nums4[i].length;j++) {System.out.print(nums4[i][j] + "\t");}System.out.println();}// 连声明带开辟空间int [][]nums5 = new int[2][3];for(int i = 0;i <nums5.length;i++) {for (int j = 0; j < nums5[i].length; j++) {System.out.print("*");}System.out.println();}}}
初识面向对象
1. 万物皆对象
万物皆对象是指我们可以将任何的事物都分析出属性和行为,理解为对象。
2. 类和对象的关系
类是对象的抽象,对象是类的具体。 由类衍生出对象。
3. 属性和方法
属性:一些事物共有的特征,称之为属性 方法:一些事物共有的动作,称之为方法
4.创建类和对象
package com.qfedu.test6;/*** 万物皆对象* 类是对象的抽象 对象是类的具体* 学生类* 类的组成包括特征(属性) 和 行为(方法)* 属性:* 名字 String* 年龄 int* 性别 char* 身高 double* 学号 String* 体重 double* 爱好 String* 地址 String* ……* 行为:* 学习* 谈恋爱* 睡觉* 吃饭* 做运动* @author WHD**/public class Student {// 属性 也叫实例变量 直接书写在类中String name;int age;double height;double weight;String stuNo;String hobby;String address;char sex;// 方法 实例方法 普通方法 没有static关键字public void study() {System.out.println("学生学习");}public void love() {System.out.println("谈恋爱");}public void sleep() {System.out.println("睡觉");}public void sport() {System.out.println("做运动");}public static void main(String[] args) {// 没有对象怎么办? new一个// 类名 对象名 = new 类名();Student stu1 = new Student();// 给对象的属性赋值 使用对象名+.+属性名//stu1.name = "赵四";stu1.age = 20;stu1.address = "象牙山";stu1.hobby = "尬舞";stu1.sex = '男';stu1.stuNo = "zz666";stu1.height = 180;stu1.weight = 70;System.out.println("名字为" + stu1.name);System.out.println(stu1.age);System.out.println(stu1.sex);System.out.println(stu1.height);System.out.println(stu1.weight);System.out.println(stu1.stuNo);System.out.println(stu1.address);System.out.println(stu1.hobby);// 访问行为 方法 直接使用对象名+.+方法名调用stu1.study();stu1.love();stu1.sleep();stu1.sport();System.out.println("======================================================");// 类相当于模板 我们可以通过类创建很多对象 没有上限Student stu2 = new Student();stu2.name = "广坤";stu2.age = 17;stu2.hobby = "口技";stu2.address = "象牙山";stu2.height = 175;stu2.weight = 70;stu2.sex = '男';stu2.stuNo = "zz888";System.out.println(stu2.name);System.out.println(stu2.age);System.out.println(stu2.sex);System.out.println(stu2.height);System.out.println(stu2.weight);System.out.println(stu2.stuNo);System.out.println(stu2.address);System.out.println(stu2.hobby);stu2.study();stu2.love();stu2.sleep();stu2.sport();}}
打印详细的信息,将属性使用到方法中
package com.qfedu.test7;/*** 属性* 方法** 实例变量:* 定义位置:在类中* 默认值:有默认值,与数组相同* 作用范围:当前整个类中* 重名:可以与局部变量重名 局部变量优先 就近原则* 生命周期:随着对象的的创建而存在 随着对象被垃圾回收而死亡 GC Garbage Collection* 存储位置:实例变量存储在堆中* @author WHD**/public class Student {String name;int age;char sex;double height;public void study() {// String name = "jack";System.out.println(name + "在学习");}public void play() {System.out.println(name + "在玩游戏");}public void printInfo() {System.out.println("我的名字是" + name + ",年龄是" + age + ",身高是" + height + ",性别是" + sex);}public static void main(String[] args) {Student stu1 = new Student();stu1.name = "赵四";stu1.age = 17;stu1.height = 175;stu1.sex = '男';stu1.study();stu1.play();stu1.printInfo();stu1 = null;System.out.println("=================================");Student stu2 = new Student();stu2.name = "广坤";stu2.play();stu2.study();stu2.printInfo();System.out.println("=================================");Student stu3 = new Student();// int [] a = new int[10];stu3.printInfo();}}
4.实例变量的特点
| 实例变量 | 描述 |
|---|---|
| 定义位置 | 类中 |
| 作用范围 | 整个类中 |
| 默认值 | 有默认值,与数组相同 |
| 重名 | 可以与局部变量重名,局部变量优先使用,就近原则 |
| 生命周期 | 随着对象的的创建而存在 随着对象被垃圾回收而死亡 GC Garbage Collection |
| 存储位置 | 实例变量存储在堆中 |
