3JAVA基础语法数组Word文档下载推荐.docx
《3JAVA基础语法数组Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《3JAVA基础语法数组Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
![3JAVA基础语法数组Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/30/f0f92ee6-e10b-48c1-94e7-3efff0e69504/f0f92ee6-e10b-48c1-94e7-3efff0e695041.gif)
数组的角标越界异常
当访问到了数组中不存在的角标时,就会发生该异常。
NullPointerException空指针异常。
当一个引用型变量没有任何实体指向时,还在使用实体中的内容。
就会发生该异常。
System.out.println(arr);
//[I@c17164@前面代表一个一维数组@后面代表一个哈希值
1,数组是什么?
数组:
数组就是具有同一类型的一些数的一个集合。
2,数组有什么特点?
数组的特点:
必须明确数组的长度和数组的类型,以及数组带有角标,方便使用。
3,数组什么时候使用?
当在处理多个同类型的数据时候可以采用数组存储
4,java的内存(栈和堆)的特点?
栈:
存储都是局部变量(函数参数,函数内定义的变量,局部代码块中定义的变量),栈内存的变量没有初始化值。
变量一点使用完(作用域结束),随着函数的加载变量会在内存中开辟属于自己的空间。
一旦函数运行结束,就会在栈内存中自动释放。
先进后出,后进先出。
存储的是实体(数组和对象,只要是new的都在堆中)。
new关键字一出现都会在堆内存中分配实体空间。
堆内存中的所有变量都会有默认初始化值。
5,画出一个数组的内存分布图。
并用文字描述步骤。
内存分布图:
int[]arr=newint[3];
arr[1]=100;
内存加载说明:
当执行到int[]arr时。
首先在栈内存开辟一个以数组名为名的空间,这个空间的目的是存放一个堆内存中数组的内存地址。
此时这个空间中并没有存放任何值。
当执行到newint[3]时,会在堆内存中首先划分出一块数组内存区域,这个时候就有一个内存地址与之对应,这里假设0x0056。
然后将这个区域分成3个小空间分别代表数组的三个存储空间,他们一旦分配就会自动产生索引角标,同时也会自动初始化值,此时由于数组是int的所有初始化值为0.并将这个堆内存中的数组首地址赋值给栈内存的arr空间。
当赋值后,栈内存的arr数组名就能所引到堆内存中的数组存储区域。
此时整个数组的定义个空间分配结束。
当执行arr[1]=100时,就会将这个以100存放到数组角标为1的空间中,原来初始化的0被覆盖。
需要注意的是,一旦arr不再指向堆内存的数组存储区域时,这个数组同时也没有其他引用变量所有引用,那么堆内存中的这个数组存储区域将变成垃圾,等待JVM的垃圾回收器把它收走。
数组的简单操作、排序、最值、折半查找、查表法、数组内存分布图
1、数组的简单操作:
数组在定义的时候必须明确数组的类型和长度,并明确了数组中元素的内容。
为了方便获取数组中的元素个数的方式,可以使用数组实体一个属性。
length
使用方法为数组名.length
数组最常见的操作就是数组:
遍历。
其实操作数组的最终核心思想:
就是操作角标(索引)。
2、最值:
classArrayTest{
publicstaticvoidmain(String[]args){
int[]arr={3,6,8,1,88,22};
intmax=getMax(arr);
System.out.println("
max="
+max);
}
/*
定义一个功能完成获取数组中最大值的动作。
定义一个函数来体现。
1,确定结果:
整数数组中的最大值,int。
2,确定未知:
数组是未知的,参数列表中有一个参数,数组类型int[]
具体怎么功能细节如何实现呢?
思路:
1,对数组中的元素进行比较,将比较后比较大的值进行记录,并参与下一次比较。
当数组中的元素都比较完成后,最大值就已经被记录下来了。
2,每次比较的较大的值不确定,定义一个变量进行记录,该变量如何初始化呢?
只要初始化为数组中的任意一个元素即可。
3,应该让数组中的元素自动和该变量记录的元素进行比较。
所以可以使用遍历,获取出数组中的每一个元素。
4,当遍历到的元素比较变量中的记录的元素大,用该变量记录住更大的元素。
5,遍历结束后,变量中存储的就是数组中的最大值。
*/
publicstaticintgetMax(int[]arr){
//定义变量记录较大的值。
intmax=arr[0];
//初始化为数组中的任意一个元素。
for(intx=1;
x<
arr.length;
x++){
if(arr[x]>
max)
max=arr[x];
}
returnmax;
//继续获取数组最大值。
publicstaticintgetMax2(int[]arr){
intmaxIndex=0;
//初始化为数组中的一个角标。
arr[maxIndex])
maxIndex=x;
returnarr[maxIndex];
}
数组的各种操作:
classArraySort{
int[]arr=newint[]{3,5,7,8,9,5,3,1,3,4,67,7,8,12,8,98,9};
printArray(arr);
//intmax=getMax(arr);
//System.out.println("
//intmin=getMin(arr);
min="
+min);
//selectSortMaxToMin(arr);
//printArray(arr);
//niZhuan(arr);
//intindex=halfSearch2(arr,98);
index="
+index);
bubbleSort(arr);
getMax函数用于获取int数组的最大值,需要指明具体哪一个int数组
publicstaticintgetMax(int[]arr)
{
intmax=arr[0];
for(inti=0;
i<
i++)
{
if(arr[i]>
max)
{
max=arr[i];
}
getMin函数用于获取int数组的最小值,需要指明具体哪一个int数组
publicstaticintgetMin(int[]arr)
intmin=arr[0];
if(arr[i]<
min)
min=arr[i];
returnmin;
selectSortMaxToMin函数用于int数组的从大到小排序,需要指明具体哪一个int数组
publicstaticvoidselectSortMaxToMin(int[]arr)
arr.length-1;
for(intj=i+1;
j<
j++)
arr[j])
swap(arr,i,j);
}
selectSortMinToMax函数用于int数组的从小到大排序,需要指明具体哪一个int数组
publicstaticvoidselectSortMinToMax(int[]arr)
printArray函数用于int数组的打印,需要指明具体哪一个int数组
publicstaticvoidprintArray(int[]arr)
if(i<
arr.length-1)
System.out.print(arr[i]+"
"
);
else
System.out.println(arr[i]+"
\n"
halfSearch函数采用折半法(二分法)从int数组中查找一个指定的数在此数组中的角标位置,使用之前必须保证提供的数组已经是有序的数组,需要指明具体哪一个int数组
publicstaticinthalfSearch(int[]arr,intkey)
intmin,max,mid,index;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(min<
=max)
if(key>
arr[mid])
min=mid+1;
elseif(key<
max=mid-1;
elsereturnmid;
mid=(min+max)/2;
return-1;
publicstaticinthalfSearch2(int[]arr,intkey)
while(arr[mid]!
=key)
elsereturn-1;
returnmid;
swap函数用于交换数组中的两个数值,必须明确具体着两个数的角标
publicstaticvoidswap(int[]arr,inti,intj)
inttemp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
;
niZhuan函数用于把一个数组反转
publicstaticvoidniZhuan(int[]arr)
for(inti=0,j=arr.length-1;
j;
i++,j--)
swap(arr,i,j);
bubbleSort函数功能是用冒泡发对数组进行排序
publicstaticvoidbubbleSort(int[]arr)
for(inti=0;
arr.length-1;
for(intj=0;
j<
arr.length-i-1;
j++)
if(arr[j]>
arr[j+1])
{
swap(arr,j,j+1);
}
查表法完成进制转换:
classArrayTest
{
publicstaticvoidmain(String[]args)
toBin(-6);
System.out.println(Integer.toBinaryString(-6));
toHex(26);
toOctal(48);
//十进制--二进制
publicstaticvoidtoBin(intnum)
trans(num,1,1);
//十进制--八进制
publicstaticvoidtoOctal(intnum)
trans(num,7,3);
//十进制--十六进制
publicstaticvoidtoHex(intnum)
trans(num,15,4);
publicstaticvoidtrans(intnum,intbase,intoffset)
if(num==0)
System.out.println(0);
return;
//定义一个十六进制的元素的表。
char[]arr={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
A'
B'
C'
D'
E'
F'
};
//定义一个char类型元素的数组,用于存储每次获取到的十六进制值。
char[]chs=newchar[32];
intpos=chs.length;
while(num!
=0)
{
inttemp=num&
base;
chs[--pos]=arr[temp];
num=num>
>
offset;
pos="
+pos);
//打印数组内容。
for(intx=pos;
chs.length;
x++)
System.out.print(chs[x]);
System.out.println();
二维数组:
常见的二维数组的定义形式:
1、int[][]arr=newint[3][3];
2、int[][]arr=newint[3][];
//定义一个二维数组,明确了二维数组的长度,但是二维中的每一个一位数组没有明确
arr[0]=newint[3];
arr[1]=newint[2];
arr[2]=newint[5];
3、int[]arr[]=newint[3][3];
4、intarr[][]=newint[3][3];
5、int[][]arr={{1,3,5,6},{6,3,2},{1,2}};
什么时候使用二维数组:
当数组多了就可以采用二维数组来继续存储。
中括号随着类型定义对所有变量都起作用,如果中括号在变量后面只对当前的变量起作用。
classArray2Demo
{
//int[]arr=newint[3];
//数组中的数组:
数组中的元素还是数组。
//int[][]arr=newint[2][3];
//System.out.println(arr[0][1]);
//0
//System.out.println(arr[0]);
//[I@c17164
//System.out.println(arr);
//[[I@c17164
int[][]arr=newint[][];
//定义一个二维数组,明确了二维数组的长度,
//但是二维中每一个一维数组并没有明确。
//对二位数组中的每一个一维数组进行初始化。
arr[0]=newint[3];
arr[1]=newint[1];
arr[2]=newint[2];
System.out.println(arr);
//[[I@c17164
System.out.println(arr[0]);
//null
classArray2Demo2
//int[][]arr={{3,7,18,5},{3,6,4,8,9},{15,89}};
int[][]arr={{4,6,2,8},{1,9,3,2},{6,8,4,8}};
//System.out.println(arr.length);
//3
//System.out.println(arr[1].length);
//遍历二维数组中的所有元素。
大圈套小圈
for(intx=0;
x++)
intsum=0;
for(inty=0;
y<
arr[x].length;
y++)
//System.out.println(arr[x][y]);
sum+=arr[x][y];
System.out.println("
sum="
+sum);
String[]arr1=getMonth("
夏季"
arr1.length;
System.out.println(arr1[x]+"
publicstaticString[]getMonth(Stringstr)
String[]season={"
春季"
秋季"
冬季"
intindex=searchIndex(season,str);
String[][]month={{"
三月"
四月"
五月"
},{"
六月"
七月"
八月"
}};
returnmonth[index];
publicstaticintsearchIndex(String[]arr,Stringkey)
if(arr[x].equals(key))
returnx;
1,数组的操作基本思想?
数组:
数组就是一个容器,用来装元素,需要明确数组的类型和数组的长度。
数组就是把很多个变量放在一起的一个集合。
2,数组的常见的操作动作以及理解过程。
最值,排序,折半.
数组的基本思想:
数组最常用的操作动作:
存值和获取值,比如获取:
最值
排序,折半查找。
3,数组容器的应用场景?
什么时候使用容器:
一旦数据多,个数能确定就采用数组来存储。
4,必须掌握查表法,将查表法的思想写出来,并明确什么时候使用查表法。
表:
是个容器,表里面存在一定的对应关系。
查:
用一种对应关系去找另外一种对应关系。
编码表:
是生活中的一些事物对应的二进制数的一个序列。