数组是相同数据类型的多个数据的容器。
这些元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素。(“简单理解就是:一个跟一个顺序排列”)。
创建格式
- 格式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
常见问题
- 数组下标越界:程序直接崩溃,后面的代码就不运行了。
- 空指针:名称指向的值不存在
常用算法
寻找最值
- 创建一个变量用于存储发现的最值,建议使用数组的第一个数,然后和第二个数字比较。
- 循环取出每一个内容,用来和n比较。
冒泡排序
原理:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
升序:
package week1;import java.util.Scanner;public class maopao {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);int[] nums = new int[5];int temp;System.out.println("请输入5个数:");for(int i = 0; i<5; i++) {nums[i] = input.nextInt();}//外层循环控制比较轮数 length-1for(int i=0; i<nums.length-1; i++) {//内层循环控制比较次数 length-1-ifor(int j=0; j<nums.length-1-i; j++) {if(nums[j]>nums[j+1]) {temp = nums[j];nums[j] = nums[j+1];nums[j+1] = temp;}}}//打印查看for(int i=0; i<5; i++) {System.out.print("\t"+nums[i]);}}}
降序:
//外层循环控制比较轮数 length-1for(int i=0; i<nums.length-1; i++) {//内层循环控制比较次数 length-1-ifor(int j=0; j<nums.length-1-i; j++) {if(nums[j]<nums[j+1]) {temp = nums[j];nums[j] = nums[j+1];nums[j+1] = temp;}}}
二分查找
package week1;import java.util.Scanner;public class erfenchazhao {public static void main(String[] args) {Scanner input = new Scanner(System.in);int[] nums = {50, 40, 30, 20, 10, 0};System.out.println("请输入想要查找的数字:");int a = input.nextInt();int max = nums.length-1, min = 0;int center = (max+min)/2;System.out.println("center:"+center);while(true){if(a > nums[center]) {//中间数据小max = center - 1;}else if(a < nums[center]){//中间数据大min = center + 1;}else {//找到了数据break;}if(min > max) {//不存在center = -1;break;}//更新下标center = (min + max)/2;}System.out.println("位置:"+center);}}
二维数组
全国地图数据存储
