排序和面向对象

1. 冒泡

两两相邻比较 遇到条件成立(大于或者小于)就交换位置 经过作图分析: 比较的轮数是长度-1 外层循环控制比较的轮数 每一轮比较的次数 最多的一次是长度-1 依次递减 内层循环控制比较的次数 外层循环 N - 1 内层循环 N - 1 - i

  1. package com.qfedu.test2;
  2. import java.util.Arrays;
  3. /**
  4. * 冒泡排序
  5. * 希尔排序 快速排序 堆排序 桶排序 选择排序 猴子排序
  6. *
  7. * 排序:将乱序的一组数列经过算法 排列为升序或者降序
  8. * 冒泡排序:两两相邻比较 遇到条件成立(大于或者小于)就交换位置
  9. *
  10. * 经过作图分析:
  11. * 比较的轮数是长度-1 外层循环控制比较的轮数
  12. * 每一轮比较的次数 最多的一次是长度-1 依次递减 内层循环控制比较的次数
  13. *
  14. * 外层循环 N - 1
  15. * 内层循环 N - 1 - i
  16. * @author WHD
  17. *
  18. */
  19. public class Test1 {
  20. public static void main(String[] args) {
  21. int a = 10;
  22. int b = 20;
  23. int c = a;
  24. a = b;
  25. b = c;
  26. int [] nums = {20,1,55,784,10,233,65};
  27. for(int i = 0;i < nums.length - 1;i++) {
  28. for(int j = 0;j < nums.length - 1 - i;j++) {
  29. if(nums[j] < nums[j + 1]) {
  30. int temp = nums[j];
  31. nums[j] = nums[j + 1];
  32. nums[j + 1] = temp;
  33. }
  34. }
  35. }
  36. System.out.println(Arrays.toString(nums));
  37. }
  38. }

2. 选择

比较方式:使用一个元素去其他的元素进行比较 遇到需要交换位置的元素 先不交换 等到一轮比较完以后 交换一次位置 比较的次数与冒泡是一样的 但是 交换位置的次数 大大减少了 长度-1 的元素都将充当一遍比较的数A 从第二个元素开始 都将充当一遍比较的数B 外层循环 是比较的数A 内层循环 是比较的数B

  1. package com.qfedu.test3;
  2. import java.util.Arrays;
  3. /**
  4. * 选择排序
  5. * 冒泡的方式三个人比高低个:广坤 180 赵四 188 刘能 155
  6. *
  7. * 比较方式:使用一个元素去其他的元素进行比较 遇到需要交换位置的元素
  8. * 先不交换 等到一轮比较完以后 交换一次位置
  9. * 比较的次数与冒泡是一样的 但是 交换位置的次数 大大减少了
  10. *
  11. * 长度-1 的元素都将充当一遍比较的数A
  12. * 从第二个元素开始 都将充当一遍比较的数B
  13. * 外层循环 是比较的数A
  14. * 内层循环 是比较的数B
  15. * @author WHD
  16. *
  17. */
  18. public class Test1 {
  19. public static void main(String[] args) {
  20. int [] nums = {20,1,55,784,10,233,65};
  21. for(int i = 0;i < nums.length - 1;i++) {
  22. int minIndex = i;
  23. for(int j = i + 1;j < nums.length;j++) {
  24. if(nums[minIndex] > nums[j]) {
  25. minIndex = j;
  26. }
  27. }
  28. if(minIndex != i) {
  29. int temp = nums[minIndex];
  30. nums[minIndex] = nums[i];
  31. nums[i] = temp;
  32. }
  33. }
  34. System.out.println(Arrays.toString(nums));
  35. }
  36. }

3.JDK自带排序

JDK自带的排序 升序 Arrays.sort(数组名)

  1. package com.qfedu.test4;
  2. import java.util.Arrays;
  3. /**
  4. * JDK自带的排序
  5. * Arrays.sort(数组名)
  6. * @author WHD
  7. *
  8. */
  9. public class Test1 {
  10. public static void main(String[] args) {
  11. int [] nums = {20,1,55,784,10,233,65};
  12. Arrays.sort(nums); // 升序
  13. //降序
  14. int [] newNums = new int[nums.length];
  15. for(int i = 0,j = nums.length - 1;i < nums.length;i++,j--) {
  16. newNums[i] = nums[j];
  17. }
  18. System.out.println(Arrays.toString(newNums));
  19. System.out.println(Arrays.toString(nums));
  20. }
  21. }

4. 二维数组

二维数组 数组中的元素还是数组 创建二维数组的方式还跟之前一样 四种

  1. package com.qfedu.test5;
  2. /**
  3. * 二维数组 数组中的元素还是数组
  4. * 我们之前用的都是一维数组
  5. * @author WHD
  6. *
  7. */
  8. public class Test1 {
  9. public static void main(String[] args) {
  10. int [] nums1 = {1,2,3,4,5};
  11. // 声明带赋值 简单
  12. int [][] nums2 = {{1,2,3}, {4,5,6,7,8,9,5,6,8,6,5,20}, {11,22,33,445} , {89,78,45}};
  13. System.out.println(nums2[0][0]);
  14. System.out.println(nums2[0][1]);
  15. System.out.println(nums2[0][2]);
  16. System.out.println(nums2[1][0]);
  17. System.out.println(nums2[1][1]);
  18. System.out.println(nums2[1][2]);
  19. // 声明带赋值 繁琐
  20. int [][] nums3 = new int[][] {{1},{2},{3}};
  21. // 先声明 再开辟空间
  22. int [][] nums4;
  23. nums4 = new int[4][];
  24. nums4[0] = new int[3];
  25. nums4[0][0] = 20;
  26. nums4[0][1] = 21;
  27. nums4[0][2] = 22;
  28. nums4[1] = new int[4];
  29. nums4[1][0] = 11;
  30. nums4[1][1] = 12;
  31. nums4[1][2] = 13;
  32. nums4[1][3] = 14;
  33. nums4[2] = new int[5];
  34. nums4[2][0] = 1;
  35. nums4[2][1] = 1;
  36. nums4[2][2] = 1;
  37. nums4[2][3] = 1;
  38. nums4[2][4] = 1;
  39. nums4[3] = new int[6];
  40. nums4[3][0] = 2;
  41. nums4[3][1] = 2;
  42. nums4[3][2] = 2;
  43. nums4[3][3] = 2;
  44. nums4[3][4] = 2;
  45. nums4[3][5] = 2;
  46. for(int i = 0;i < nums4.length;i++) {
  47. // System.out.println(nums4[i]);
  48. for(int j = 0;j <nums4[i].length;j++) {
  49. System.out.print(nums4[i][j] + "\t");
  50. }
  51. System.out.println();
  52. }
  53. // 连声明带开辟空间
  54. int [][]nums5 = new int[2][3];
  55. for(int i = 0;i <nums5.length;i++) {
  56. for (int j = 0; j < nums5[i].length; j++) {
  57. System.out.print("*");
  58. }
  59. System.out.println();
  60. }
  61. }
  62. }

初识面向对象

1. 万物皆对象

万物皆对象是指我们可以将任何的事物都分析出属性和行为,理解为对象。

2. 类和对象的关系

类是对象的抽象,对象是类的具体。 由类衍生出对象。

3. 属性和方法

属性:一些事物共有的特征,称之为属性 方法:一些事物共有的动作,称之为方法

4.创建类和对象

  1. package com.qfedu.test6;
  2. /**
  3. * 万物皆对象
  4. * 类是对象的抽象 对象是类的具体
  5. * 学生类
  6. * 类的组成包括特征(属性) 和 行为(方法)
  7. * 属性:
  8. * 名字 String
  9. * 年龄 int
  10. * 性别 char
  11. * 身高 double
  12. * 学号 String
  13. * 体重 double
  14. * 爱好 String
  15. * 地址 String
  16. * ……
  17. * 行为:
  18. * 学习
  19. * 谈恋爱
  20. * 睡觉
  21. * 吃饭
  22. * 做运动
  23. * @author WHD
  24. *
  25. */
  26. public class Student {
  27. // 属性 也叫实例变量 直接书写在类中
  28. String name;
  29. int age;
  30. double height;
  31. double weight;
  32. String stuNo;
  33. String hobby;
  34. String address;
  35. char sex;
  36. // 方法 实例方法 普通方法 没有static关键字
  37. public void study() {
  38. System.out.println("学生学习");
  39. }
  40. public void love() {
  41. System.out.println("谈恋爱");
  42. }
  43. public void sleep() {
  44. System.out.println("睡觉");
  45. }
  46. public void sport() {
  47. System.out.println("做运动");
  48. }
  49. public static void main(String[] args) {
  50. // 没有对象怎么办? new一个
  51. // 类名 对象名 = new 类名();
  52. Student stu1 = new Student();
  53. // 给对象的属性赋值 使用对象名+.+属性名
  54. //
  55. stu1.name = "赵四";
  56. stu1.age = 20;
  57. stu1.address = "象牙山";
  58. stu1.hobby = "尬舞";
  59. stu1.sex = '男';
  60. stu1.stuNo = "zz666";
  61. stu1.height = 180;
  62. stu1.weight = 70;
  63. System.out.println("名字为" + stu1.name);
  64. System.out.println(stu1.age);
  65. System.out.println(stu1.sex);
  66. System.out.println(stu1.height);
  67. System.out.println(stu1.weight);
  68. System.out.println(stu1.stuNo);
  69. System.out.println(stu1.address);
  70. System.out.println(stu1.hobby);
  71. // 访问行为 方法 直接使用对象名+.+方法名调用
  72. stu1.study();
  73. stu1.love();
  74. stu1.sleep();
  75. stu1.sport();
  76. System.out.println("======================================================");
  77. // 类相当于模板 我们可以通过类创建很多对象 没有上限
  78. Student stu2 = new Student();
  79. stu2.name = "广坤";
  80. stu2.age = 17;
  81. stu2.hobby = "口技";
  82. stu2.address = "象牙山";
  83. stu2.height = 175;
  84. stu2.weight = 70;
  85. stu2.sex = '男';
  86. stu2.stuNo = "zz888";
  87. System.out.println(stu2.name);
  88. System.out.println(stu2.age);
  89. System.out.println(stu2.sex);
  90. System.out.println(stu2.height);
  91. System.out.println(stu2.weight);
  92. System.out.println(stu2.stuNo);
  93. System.out.println(stu2.address);
  94. System.out.println(stu2.hobby);
  95. stu2.study();
  96. stu2.love();
  97. stu2.sleep();
  98. stu2.sport();
  99. }
  100. }

打印详细的信息,将属性使用到方法中

  1. package com.qfedu.test7;
  2. /**
  3. * 属性
  4. * 方法
  5. *
  6. * 实例变量:
  7. * 定义位置:在类中
  8. * 默认值:有默认值,与数组相同
  9. * 作用范围:当前整个类中
  10. * 重名:可以与局部变量重名 局部变量优先 就近原则
  11. * 生命周期:随着对象的的创建而存在 随着对象被垃圾回收而死亡 GC Garbage Collection
  12. * 存储位置:实例变量存储在堆中
  13. * @author WHD
  14. *
  15. */
  16. public class Student {
  17. String name;
  18. int age;
  19. char sex;
  20. double height;
  21. public void study() {
  22. // String name = "jack";
  23. System.out.println(name + "在学习");
  24. }
  25. public void play() {
  26. System.out.println(name + "在玩游戏");
  27. }
  28. public void printInfo() {
  29. System.out.println("我的名字是" + name + ",年龄是" + age + ",身高是" + height + ",性别是" + sex);
  30. }
  31. public static void main(String[] args) {
  32. Student stu1 = new Student();
  33. stu1.name = "赵四";
  34. stu1.age = 17;
  35. stu1.height = 175;
  36. stu1.sex = '男';
  37. stu1.study();
  38. stu1.play();
  39. stu1.printInfo();
  40. stu1 = null;
  41. System.out.println("=================================");
  42. Student stu2 = new Student();
  43. stu2.name = "广坤";
  44. stu2.play();
  45. stu2.study();
  46. stu2.printInfo();
  47. System.out.println("=================================");
  48. Student stu3 = new Student();// int [] a = new int[10];
  49. stu3.printInfo();
  50. }
  51. }

4.实例变量的特点

实例变量 描述
定义位置 类中
作用范围 整个类中
默认值 有默认值,与数组相同
重名 可以与局部变量重名,局部变量优先使用,就近原则
生命周期 随着对象的的创建而存在 随着对象被垃圾回收而死亡 GC Garbage Collection
存储位置 实例变量存储在堆中