数组是相同数据类型的多个数据的容器
这些元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素。(“简单理解就是:一个跟一个顺序排列”)。

创建格式

  • 格式1:创建数组并且指定长度,不指定内容

数据类型[] 数组名称 = new 数据类型[数组长度];int[] ages = new int[10];
变量默认值是0.

  • 格式2:创建数组的同时制定数组中的内容

数据类型[] 数组名称 = {数组内容 1,数组内容 2,数组内容 3…数组内容 n};int[] ages = {10, 11, 12, 13}

  • 格式3:创建数组但是不初始化

数据类型[] 数组名;int[] nums; 但是不能用{}赋值,在外部加static

  • 格式4:创建数组,指定内容

数据类型[] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3…内容 n};int[] nums = new int[] {11, 12};

获取数组的长度:数组名称.lengthlength = ages.length

常见问题

  • 数组下标越界:程序直接崩溃,后面的代码就不运行了。
  • 空指针:名称指向的值不存在

常用算法

寻找最值

  1. 创建一个变量用于存储发现的最值,建议使用数组的第一个数,然后和第二个数字比较。
  2. 循环取出每一个内容,用来和n比较。

冒泡排序

原理:

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

升序:

  1. package week1;
  2. import java.util.Scanner;
  3. public class maopao {
  4. public static void main(String[] args) {
  5. // TODO Auto-generated method stub
  6. Scanner input = new Scanner(System.in);
  7. int[] nums = new int[5];
  8. int temp;
  9. System.out.println("请输入5个数:");
  10. for(int i = 0; i<5; i++) {
  11. nums[i] = input.nextInt();
  12. }
  13. //外层循环控制比较轮数 length-1
  14. for(int i=0; i<nums.length-1; i++) {
  15. //内层循环控制比较次数 length-1-i
  16. for(int j=0; j<nums.length-1-i; j++) {
  17. if(nums[j]>nums[j+1]) {
  18. temp = nums[j];
  19. nums[j] = nums[j+1];
  20. nums[j+1] = temp;
  21. }
  22. }
  23. }
  24. //打印查看
  25. for(int i=0; i<5; i++) {
  26. System.out.print("\t"+nums[i]);
  27. }
  28. }
  29. }

降序:

  1. //外层循环控制比较轮数 length-1
  2. for(int i=0; i<nums.length-1; i++) {
  3. //内层循环控制比较次数 length-1-i
  4. for(int j=0; j<nums.length-1-i; j++) {
  5. if(nums[j]<nums[j+1]) {
  6. temp = nums[j];
  7. nums[j] = nums[j+1];
  8. nums[j+1] = temp;
  9. }
  10. }
  11. }

二分查找

  1. package week1;
  2. import java.util.Scanner;
  3. public class erfenchazhao {
  4. public static void main(String[] args) {
  5. Scanner input = new Scanner(System.in);
  6. int[] nums = {50, 40, 30, 20, 10, 0};
  7. System.out.println("请输入想要查找的数字:");
  8. int a = input.nextInt();
  9. int max = nums.length-1, min = 0;
  10. int center = (max+min)/2;
  11. System.out.println("center:"+center);
  12. while(true){
  13. if(a > nums[center]) {
  14. //中间数据小
  15. max = center - 1;
  16. }else if(a < nums[center]){
  17. //中间数据大
  18. min = center + 1;
  19. }else {
  20. //找到了数据
  21. break;
  22. }
  23. if(min > max) {
  24. //不存在
  25. center = -1;
  26. break;
  27. }
  28. //更新下标
  29. center = (min + max)/2;
  30. }
  31. System.out.println("位置:"+center);
  32. }
  33. }

二维数组

全国地图数据存储

数组越界问题