数组:表示相同数据类型,固定长度的一组有序数据。 按维度分为一维数组、二维数组、多维数组。
一:一维数组:
/*
1.数组属于引用数据类型的变量,数组的元素即可以是基本类型也可以是引用类型
2.数组的索引是从0开始
3.创建数组对象会在内存中开辟一整块连续的空间
4.数组的长度一旦确定,就不能修改
*/
//静态初始化
int[] arry1 =new int[] {1,2,3,4,5,6};
//动态初始化
int[] arry2 = new int[3];
arry2[0]=1;
arry2[1]=3;
arry2[2]=5;
//数组名称为内存首地址
System.out.println(arry1);
//length属性获取数组长度
System.out.println(arry1.length);
//根据索引输出数组元素
System.out.println(arry1[2]);
//遍历数组
for(int i=0;i<arry1.length;i++) {
System.out.println(arry1[i]);
}
内存分析:
//例题1:从键盘输入考生数量和输入成绩,输出最大成绩并根据成绩判断等级
//1.输入考试人数:
Scanner scan =new Scanner(System.in);
System.out.println("请输入考试学生人数:");
int number= scan.nextInt();
//2.输入考试分数,并获取最大值
int[] arryDemo =new int[number];
System.out.println("请输入考试成绩:");
int maxscore=0;
for (int i=0; i<arryDemo.length;i++) {
arryDemo[i]=scan.nextInt();
if(maxscore<=arryDemo[i]) {
maxscore=arryDemo[i];
}
}
System.out.println("最高分为:"+maxscore);
//3.定义等级
char level;
for(int i=0; i<arryDemo.length;i++) {
if(maxscore-arryDemo[i]<10) {
level='A';
}else if(maxscore-arryDemo[i]<20) {
level='B';
}
else if(maxscore-arryDemo[i]<30) {
level='C';
}else {
level='D';
}
//4.输出等级信息
System.out.println("学生"+i+"分数为:"+ arryDemo[i]+",等级为:"+ level);
//例题2:随机输入10个整数,求最大值、最小值、求和,且每个数都在10到100之间
int[] array1=new int[10];
for (int i=0;i<array1.length;i++) {
array1[i]=(int)(Math.random()*90 +10);
}
for(int i=0;i<array1.length;i++) {
System.out.print(array1[i] +"\t");
}
System.out.println();
int maxarry=array1[0];
for(int i=0;i<array1.length;i++) {
if(maxarry<array1[i]) {
maxarry=array1[i];
}
}
System.out.println("最大数为:"+ maxarry);
int minarry=array1[0];
for(int i=0; i<array1.length;i++) {
if(minarry>array1[i]) {
minarry=array1[i];
}
}
System.out.println("最小数为:"+ minarry);
int sum=0;
for(int i=0;i<array1.length;i++) {
sum+=array1[i];
}
System.out.println("总和为:"+ sum);
//例题3:数组的反转 方法一:
String [] strarray= {"AA","BB","CC","DD","EE","FF"};
for(int i=0;i<strarray.length;i++) {
System.out.print(strarray[i]+"\t");
}
System.out.println();
//不管数组长度为奇数或偶数,只需要比较length/2次
for(int i=0;i<strarray.length/2;i++) {
String temp= strarray[i];
strarray[i]=strarray[strarray.length-1-i];
strarray[strarray.length-1-i]=temp;
}
for(int i=0;i<strarray.length;i++) {
System.out.print(strarray[i]+"\t");
}
System.out.println();
//例题3:数组的反转 方法二:
for(int i=0,j=strarray.length-1;i<j;i++,j--) {
String temp= strarray[i];
strarray[i]=strarray[j];
strarray[j]=temp;
}
for(int i=0;i<strarray.length;i++) {
System.out.print(strarray[i]+"\t");
}
//例题4:数组的复制:
int[] arr1 =new int[] {1,3,5,6,7,4,8,10};
int[] arr2= new int[arr1.length] ;
for(int i=0;i<arr1.length;i++) {
arr2[i]=arr1[i];
}
for(int i=0;i<arr2.length;i++) {
System.out.print(arr2[i]+"\t");
}
//例题5:数组的查找:线性查找
boolean isflag=true;
String[] strarr1= {"AA","BB","CC","DD","EE","FF"};
String deal="Fxd";
for (int i=0;i<strarr1.length;i++) {
if (strarr1[i].equals(deal)) {
System.out.println("相同元素为:"+strarr1[i]);
isflag=false;
}
}
if(isflag) {
System.out.println("没有相同元素");
}
//例题6:数组的排序:二分法查找(数组为有序的)
int[] arr3=new int[] {-10,5,15,20,30,35,40,56,60,70};
int dest=41;
int head=0;
int end=arr3.length-1;
boolean isflag2=true;
while(head<=end) {
int middle=(head+end)/2;
if(dest==arr3[middle]) {
System.out.println("找到了元素位置为:"+middle);
isflag2=false;
break;
}
else if(dest<arr3[middle]) {
end=middle-1;
}else {
head=middle+1;
}
}
//元素不在数组里
if(isflag2) {
System.out.println("很遗憾没找到!");
}
//例题7:冒泡排序
//思路:冒泡的排序为相邻两个数比较,满足条件就交换位置,外层循环控制比较轮次,内层循环控制一轮比较次数
int[] arr4 =new int[] {10,-20,3,1,34,56,12,9,30};
for(int i=0;i<arr4.length-1;i++) {
for(int j=0;j<arr4.length-1-i;j++) {
if(arr4[j]>arr4[j+1]) {
int temp=arr4[j];
arr4[j]=arr4[j+1];
arr4[j+1]=temp;
}
}
}
for(int i=0;i<arr4.length;i++) {
System.out.print(arr4[i]+"\t");
}
//8.Arrays类 常用方法:
//1.equals(a, a2) 比较两个数组的大小
//2.toString([]a) 输出数组内容
//3.sort([]a) 数组排序
int[] a1 =new int[] {1,2,3,4};
int[] a2 =new int[] {1,3,2,4};
System.out.println(Arrays.equals(a1, a2));
System.out.println(Arrays.toString(a1));
Arrays.sort(a2);
System.out.println(Arrays.toString(a2));
}
二:二维数组:
二维数组:一维数组的元素仍为一维数组
//静态初始化方法1:
int[][] array =new int [][] {{1,2,3},{4,5},{6,7,8}};
//静态初始化方法2:
int[][] array2 ={{1,2,5},{4,7},{6,7,8}};
//动态初始化1:
int[][] arr1 =new int [4][3];
//动态初始化2:
int [][] arr2=new int [4][];
// 二维数组遍历
int[][] ids = new int[][] {{1,2,3},{4,5},{6,7,8}};
for(int i=0;i<ids.length;i++) {
for(int j=0;j<ids[i].length;j++) {
System.out.print(ids[i][j] +" ");
}
System.out.println();
}
内存分析:
//打印杨辉三角
int [][] arry1 = new int[10][];
for(int i=0;i<arry1.length;i++) {
arry1[i]=new int[i+1];
arry1[i][0]=1;
arry1[i][i]=1;
for(int j=1;j<arry1[i].length-1;j++) {
arry1[i][j]=arry1[i-1][j-1]+arry1[i-1][j];
}