一、数组的概述
1.数组的理解,数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
2.数组相关的概念:
数组名:
元素:
角标、下标、索引
数组的长度:元素的个数:
3.数组的特点:
①:数组属于引用数据类型的变量。数据的元素,既可以是基本数据类型,也可以是引用数据类型。
②:数组是有序排列的
③:创建数组对象会在内存中开辟一整块连续的空间;
④:数组初始化其长度就已经确定,数组的长度一旦确定,就不能修改。
4、数组的分类:
①:按照维数:一维数组、二维数组……;
②:按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组。
一维数组
一维数组的使用:
①:一维数组的声明和初始化;
不同类型一维数组元素的默认初始值格式多少
int:0;
浮点型:0.0;
char:0(ascll值)或‘\u0000’而非‘0’
boolean:false
引用数据类型:null;
②:如何调用数组的指定位置的元素;
③:如何获取数组的长度;
④:如何遍历数组
⑤:数组元素的默认初始化值
⑥:数组的内存解析
eg:
package com.enlai.consst;
public class helloeverday {
public static void main(String[] args){
int num;//声明
num=10;//初始化
int id=100;//声明初始化
int [] ids;//声明
//1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids=new int[]{11,12,13};
//1,2动态初始化:数组的初始化和数组元素的赋值操作分开
String[] name=new String[5];
//数组一旦初始化完成,其长度就确定;
//2.如何调用数组的指定位置的元素:通过角标的方式调用。
// 数组的角标(或索引)从零开始的,到数组的长度-1结束;
name[0]="张良";
name[1]="张飞";
name[2]="白起";
name[3]="后羿";
name[4]="鲁班";
//如何获得数组的长度
//属性:length
System.out.println(name.length);
System.out.println(ids.length);
//如何遍历数组
for(int i=0;i<name.length;i++)
{
System.out.println(name[i]);
}
}
}
eg2:
package com.enlai.consst;
/*数组元素的默认初始化值
数组元素是整型:0;
数组元素是浮点型:0.0;
数组元素是char型:0(ascll值)或‘\u0000’而非‘0’
数组元素是Boolean型:FALSE;
数组元素是引用数据类型:null而不是“null”
*/
public class helloeverday {
public static void main(String[] args){
int []num=new int[4];
for(int i=0;i<num.length ;i++)
System.out.println(num[i]);
System.out.println("***********************");
short []num1=new short[4];
for(short i=0;i<num1.length ;i++)
System.out.println(num1[i]);
System.out.println("***********************");
float []num2=new float[4];
for(int i=0;i<num2.length ;i++)
System.out.println(num2[i]);
System.out.println("***********************");
double []num3=new double[4];
for(int i=0;i<num3.length ;i++)
System.out.println(num3[i]);
System.out.println("***********************");
char []num4=new char[4];
for(int i=0;i<num.length ;i++)
System.out.println("----"+num4[i]+"++++");
System.out.println("***********************");
boolean []num5=new boolean[4];
for(int i=0;i<num.length ;i++)
System.out.println(num5[i]);
System.out.println("***********************");
String []num6=new String[4];
for(int i=0;i<num.length ;i++)
System.out.println(num6[i]);
System.out.println("***********************");
}
}
eg3:
public static void main(String[] args)
{
Scanner scanner =new Scanner (System.in);
int num = scanner.nextInt();
System.out.println("请输入"+num+"个学生的成绩");
int []arr=new int[num];
for(int i=0;i<num;i++)
{
arr[i]=scanner.nextInt();
}
System.out.println("求出最高成绩");
int maxnum=0;
for(int i=0;i<num;i++)
{
if(arr[i]>maxnum)
maxnum=arr[i];
}
System.out.println("最高成绩是"+maxnum);
System.out.println("每个成员的等级");
char leave;
for(int i=0;i<num;i++){
if(arr[i]>=maxnum-10){
leave='a';
}
}
else if(arr[i]>=maxnum-20){
leave='b';
}
else if(arr[i]>=maxnum-30){
leave='c';
}
else
leave='d';
System.out.println("成员"+i+"的成绩等级为"+leave);
}
}
二维数组的使用:
1.理解:
对于二维数组的理解,我们可以看成是一维数组array1右作为另一个一维数组array2的元素而存在。
其实,从数组底层的运行机制来看,其实没有多维数组。
二维数组的使用:
规定:二维数组分为外层数组元素,内层数组元素
int[][] arr=new int [4][2];
外层元素:arr[0],arr[1].....
内层元素:arr[0][0],arr[1][2]......
⑤数组元素的默认初始化值
针对于初始化方式一:比如:int[][] arr=new int [3][4]
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对初始值方式二,比如:int[][] arr=new int [4][];
外层元素初始化值为:null;
内层元素的初始化值为:不能调用,否则报错:
①:二维数组的声明和初始化
②:如何调用数组的指定位置的元素
③:如何获取数组的长度
④:如何遍历数组
⑤:数组元素的默认初始值化
⑥:数组的内存解析
规定:二维数组分为外层数组元素,内层数组元素
int[][] arr=new int [4][2];
外层元素:arr[0],arr[1].....
内层元素:arr[0][0],arr[1][2]......
⑤数组元素的默认初始化值
针对于初始化方式一:比如:int[][] arr=new int [3][4]
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对初始值方式二,比如:int[][] arr=new int [4][];
外层元素初始化值为:null;
内层元素的初始化值为:不能调用,否则报错:
eg1:
package consst;
public class hello{
public static void main(String[] args){
//二维数组的声明和初始化
int []arr =new int []{1,2,3};//
//静态初始化
int [][]arr1=new int[][]{{1,2,3},{2,3},{3,4,5}};
//动态初始化1
String[][]arr2=new String[3][2];
//动态初始化2
String[][]arr3=new String[3][];
//也是正确的写法
int[] arr4[]=new int [][]{{1,2,3},{4,5,6,7},{5,6,7}};
int[] arr5[]={{1,2,4},{1,3}};//类型推断
System.out.println(arr1[2][1]);
System.out.println(arr2[1][1]);
arr3[1]=new String [4];
System.out.println(arr3[1][3]);
int [][]arr4=new int[][]{{1,2,3},{2,3,4,5},{3,4,5,6},{1,1,1,1}};
//数组长度
System.out.println(arr4.length);
System.out.println(arr4[0].length);
System.out.println(arr4[1].length);
//遍历数组
for(int i=0;i<arr4.length;i++)
{
for(int j=0;j<arr4[i].length;j++)
{
System.out.print(arr4[i][j]+ " ");
}
System.out.println();
}
}
}
eg:
package consst;
public class hello{
public static void main(String[] args)
{
int [][]arr=new int[4][5];
System.out.println(arr[0]);//地址值
System.out.println(arr[0][0]);//0
System.out.println(arr);//地址值
System.out.println("**********************************");
float [][]arr1=new float[2][3];//
System.out.println(arr1[0]);//地址值
System.out.println(arr1[0][0]);//0.0
System.out.println(arr1);//地址值
System.out.println("*****************************************");
String [][]arr2=new String [5][9];//
System.out.println(arr2[0]);//地址值
System.out.println(arr2[0][0]);//null
System.out.println(arr2);//地址值
System.out.println("******************************");
String [][]arr3=new String[4][];
System.out.println(arr3[1]);
//System.out.println(arr[1][0]);报错
System.out.println("************************************");
double [][]arr4=new double [4][];
System.out.println(arr4[1]);
System.out.println("**************************************");
int [][]arr5=new int[4][];
System.out.println(arr5[1]);
}
}