目录
一、Java数组性质
·数组是一组有相同数据类型的元素的集合。
·创建数组时必须指定数组长度,不可改变。
·创建数组对象是在内存中开辟一块连续的空间。
·数组本身是引用数据类型,但数组中的元素可以是任何数据类型。
二、数组的使用
1.数组的声明(两种方式)
(1)int [ ] a; 一般情况下我们建议使用这种声明方式。
(2)int a [ ];
注意:声明数组时不能指定长度。如:int[3] a;是错误的。
2.初始化
(1)指定数组容量,初始化为默认值。
int[] arr = new int [5];
(2)初始化手动赋值,容量为元素个数。
int[] arr = new int []{1,2,3,4,5};//长度为5
//或者
int[] arr = {1,2,3,4,5};
(3)动态初始化,定数组容量和赋值分开操作
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
3.访问数组元素
访问格式:数组名[下标]; 例如:arr[0];
注意:下标从0开始,最大为 数组长度-1。
4.数组的遍历
(1)for循环遍历
int[] arr = new int []{1,2,3,4,5};
for (int i = 0; i < arr.length; i++) {//数组长度为:arr.length
System.out.println(arr[i]);
}
其中,求数组长度的方法为:数组名.length。例如:arr.length。
(2)增强for循环
格式为:
int [ ] arr = new int [ ]{1,2,3,4};
for(数组元素的类型 临时变量名字 :数组的名字){
System.out.println(临时变量名字 );
}
int[] arr1 = new int[]{1,2,3,4};
for (int x:arr1){
System.out.println(x);
}
三、冒泡排序&选择排序
1.冒泡排序
冒泡排序:从数组每次取两个相邻的数进行比较,将最大值移到最后,最后得到一个从小到大的数组。
算法实现:
int[] arr = {5,4,3,2,1};
for(int i = 0;i<arr.length-1;i++){//一共比较几趟
for(int j = 0;j<arr.length-1-i;j++){//一趟比较几次
if(arr[j]>arr[j+1]){
int max = arr[j];
arr[j] = arr[j+1];
arr[j+1] = max;
}
}
}
for(int k = 0;k<arr.length;k++) {//打印排序后数组
System.out.println(arr[k]);
}
这里其实可以简化打印函数,如下所示。运用Java语言提供的Arrays.toString()方法,将数组转化为String类型输出,可以更方便的输出数组。
System.out.println(Arrays.toString(arr));
2.选择排序
选择排序: 从第一个元素开始,与之后每一个元素比较,把较小的移到第一个位置,循环操作
5,4,3,2,1
3,5,4,2,1
......
代码实现:
int a[] = {5,4,3,2,1};
for (int i=0;i<a.length-1;i++){//一共比较几趟
int min = i; //初始化变量记录最小数位置
for (int j=i+1;j<a.length;j++){
if (a[min]>a[j]){ //得到较小值
min=j; //将较小值位置存到min
}
}
int num = a[i];//交换
a[i]=a[min];
a[min]=num;
}
System.out.println(Arrays.toString(a));
四、二维数组
1.二维数组的声明
二维数组是数组的数组,二维数组的每个元素是一维数组。
(1)int [ ][ ] a; 这里我们同样建议使用这种声明方式。
(2)int a[ ][ ];
2.初始化
例如:
int [ ] [ ] a = new int [3][5];
[3]:二维数组的长度为3。
[5]:二维数组中,每个一维数组的长度为5。
二维数组初始化定义容量大小时,可以不定义二维数组中的一维数组的长度,不能不定义二维数组的长度。
//正确初始化:
int[][] a=new int[2][3];
int[][] a=new int[2][];//这里相当于二维数组的每个元素为空,即{null,null}
//我们可以手动为其中的一维数组创建容量大小。
a[0]=new int[8];
a[1]=new int[5];
//错误初始化:
int[][] a=new int[][3];
3.二维数组的遍历
我们可以把二维数组想象成一个i*j的表格,通过嵌套循环进行层次遍历。
int[][] a=new int[2][3];
int[][] b={{1,2,3},{4,5,6}};//初始化赋值
int[][] c=new int[][]{{1,2,3},{4,5,6}};
for (int i=0;i<b.length;i++){//二维数组遍历
for (int j=0;j<b[i].length;j++){//二维数组中的一维数组遍历
System.out.print(b[i][j]+"\t");
}
System.out.println();//换行
}
4.二维数组的应用(杨辉三角)
如图所示的杨辉三角满足以下定义:
1.每行端点与结尾的数为1。
2.每个数等于它左上和右上方两数之和。
3.第n行的数字有n项。
4.每行数字左右对称,由1开始逐渐变大。
那我们如何用计算机语言实现如图10行杨辉三角的打印呢?
我们可以把它看作是二维数组的模样,空的地方可以看做是0。
以图中的10行杨辉三角为例:
1.初始化操作
由最后一行,我们可以轻易得出每一行有2*行数+1个数。因此我们初始化二维数组大小为:
int row = 10;//row为行数
int[][] a=new int[row][row*2+1];
2.遍历二维数组,完成杨辉三角中数值的计算
第一行只有最中间是1,其余位置都为0,因此二维数组从第二行开始遍历,一次取一个一维数组
这里我们要注意:遍历一维数组时,不能从第一个开始算,因为第一个数找不到他左上角数来相加;也不能到最后一个结束,因为找不到右上角的数来相加。
a[0][row] = 1;//二维数组已经初始化默认为0,第一行只有中间一个元素要赋值为1
for (int i = 1; i < a.length; i++) {//二维数组从第二行开始遍历,一次取一个一维数组
for (int j = 1; j < a[i].length-1; j++) {//一维数组不能从第一个开始算,因为第一个数找不到他左上角数来相加;也不能到最后一个结束,找不到右上角的数来相加
a[i][j]=a[i-1][j-1]+a[i-1][j+1];
}
}
3.打印杨辉三角
for (int i = 0; i < a.length; i++) {//打印
for (int j = 0; j < a[i].length; j++) {
if(a[i][j]!=0){
System.out.print(a[i][j]+"\t");
}
else {
System.out.print(" \t");
}
}
System.out.println();//换行
}
完整代码:
public static void main(String[] args) {
int row = 10;//row为行数
int[][] a=new int[row][row*2+1];
a[0][row] = 1;//第一个二维数组和一维数组已经初始化
for (int i = 1; i < a.length; i++) {//二维数组从第二行开始遍历,一次取一个一维数组
for (int j = 1; j < a[i].length-1; j++) {//一维数组不能从第一个开始算,因为第一个数找不到他左上角数来相加;也不能到最后一个结束,找不到右上角的数来相加
a[i][j]=a[i-1][j-1]+a[i-1][j+1];
}
}
for (int i = 0; i < a.length; i++) {//打印
for (int j = 0; j < a[i].length; j++) {
if(a[i][j]!=0){
System.out.print(a[i][j]+"\t");
}
else {
System.out.print(" \t");
}
}
System.out.println();//换行
}
}
以上是有关Java数组的内容分享,希望本篇文章能在您的学习生活中有所帮助。如有不正,恳请及时指出,让我们共同学习,共同进步!