数组的概述和定义格式说明
数组存在的意义
- 存储同种数据类型的多个值
数组的概念
- 数组是存储同一种数据类型的多个元素的集合,也可以看成是一个容器
- 数组既可以存储基本数据类型,又可以存储引用数据类型
数组定义格式
- 数据类型[]数组名=new 数据类型[数组长度]
数组的初始化
什么是初始化
- 就是为数组开辟连续的内存空间,并为每个数组元素赋予值
动态初始化
- int[] arr = new int[5]
- 给出初始化值,由系统决定长度
动态初始化 byte short int long默认初始化值0,float double默认初始化值是0.0,布尔型boolean默认初始化值是false,字符型char默认初始化值是’\u0000’
- [I@19bb25a [代表一维数组,I代表int类型,@代表16位地址值
静态初始化
- 静态初始化格式
- 数据类型[] 数组名=new 数据类型[]{元素1,元素2,…};
- 简化格式 数据类型[] 数组名={元素1,元素2,…};(简写形式声明和赋值必须在同一行)
- 不允许动静结合的声明方式
数组操作的两个小问题
- 数组索引越界异常ArrayIndexOutOfBoundException
- 空指针异常NullPointerException
数组的遍历
数组的属性:arr.length数组的长度
数组的最大索引:arr.length-1
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
获取最值
public static int getMax(int arr){
int max = arr[0];
for(int i=1;i<=arr.length;i++){
if(max
数组的反转
public static void reverseArray(int[] arr){
for(int i = 0; i <= arr.length-1; i++){
int temple=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
}
数组操作:查表法
class Demo11_Array{
public static void main(String[] args){
System.out.println("星期"+
getweek(3));
}
public static char getweek(int week){
char[] arr ={
' ','一','二','三','四','五',
'六','日'};
return week;
}
}
数组的基本查找
public static int getIndex(int[] arr,
int value){
for(int i=0;i<arr.length;i++){
if(arr[i]==value){
return i;
}
}
return -1;
}
二维数组
二维数组的概述
二维数组的格式
int[][] arr=new int[3][2];
注意事项
- 以下格式也可以表示二维数组
- 数据类型 数组名[][]=new 数据类型[m][n];
- 数据类型[] 数组名=new 数据类型[m][n];
int x; | int y; | int x,y; |
int[] x; |int[] y; | int[] x,y[]; |
二维数组格式2
int[][] arr = new int[m][]
arr[0]=new int[n]
二维数组格式3
int[][] arr={{1,2,3}{4,5}{1,2,3,4,5,6}}
二维数组的遍历和求和
二维数组的遍历
class Test1_Array{
public static void main(String[]
args){
int[][] arr=
{{1,2,3}{4,5}{6,7,8,9}}
for(int i=0;i<=arr.length;i++){
for(int j;
j<=arr[i].length;j++){
System.out.println
(arr[i][j]);
}
System.out.println();
}
}
}
二维数组的求和
需求公司年销售额求和:某公司按照季度和
月份统计数据如下:单位(万元)
第一季度:22,66,44;
第二季度:77,33,88;
第三季度:25,45,65;
第四季度:11,69,99;
代码如下:
class Test_Array{
public static void main(String[] args){
int[][] arr=
{{22,66,44},{77,33,88},
{25,45,65},{11,69,99}};
int sum=0;
for(int i=0;i<=arr.length-1;i++){
for(int j=0;
j<=arr[i].length;j++){
sum=sum+arr[i][j];
}
}
System.out.println(sum);
}
}
数组值传递
基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续防伪