数组:相同类型元素的集合 类型必须相同
格式:1.数据类型[] 数组名; //使用最多
2.数据类型数组名[];
赋值方式
1、静态初始化
数据类型[] 数组名={1,2, 3....};
声明=赋值 //只有声明没有赋值不行
int[] ints={12,13,14,15,16}
自定义初始元素,系统计算长度
2、动态初始化
int [] student =new
int[] ints=new int[12]
自定义初始长度
3、动态初始化
int[] ints=new int[]{12,13,14,15,16}
自定义初始元素,系统计算长度
数组的索引
//tips:从0开始
格式:
数组索引 数组名[索引值]
数组长度
数组名.length
int[] ints={1,2,3,4,5,6};
System.out.println(ints.length);
常见错误
越界:ArrayIndexOutOfBoundsException: -1
空指针:NullPointerException
当一个值为null的数组,尝试调用length属性或者使用索引时,抛出异常
数组的遍历//课上的demo04
int[] ints={1,2,3,4,5,6};
System.out.println(ints);
结果:[I@1b6d3586 此为内存地址
数组遍历方式
1.普通for循环
for (int i=0;i<ints.length;i++) {
System.out.println(ints[i]);
}
2.增强for循环
格式:for(数据类型 变量名:要遍历的数组名){变量名就是每一个数组数组}
for(int j: ints){
System.out.println(j);
}
求最大值
int[] ints={1,2,3,85,5,6};
int max=ints[0];
for (int i=1;i<ints.length;i++){
if (ints[i]>max) {
max = ints[i];
}
}
System.out.println(max);
总和、平均值
int[] ints={1,2,3,85,5,6};
int total=0;
for (int i=1;i<ints.length;i++){
total +=ints[i];
}
System.out.println(total);
//平均值
System.out.println(total/ints.length);
//java中整数相除直接取整,不会四舍五入
Arrays.toString(ints)只能打印不能调用
默认值
int 0; double 0.0 ;boolean false; char 、u0000;String null
测试代码
int[] ints=new int[5];
System.out.println(Arrays.toString(ints));
boolean[] boo=new boolean[5];
System.out.println(Arrays.toString(boo));
char[] ch=new char[5];
System.out.println(Arrays.toString(ch));
String [] str=new String[5];
System.out.println(Arrays.toString(str));
输出结果
[0, 0, 0, 0, 0]
[false, false, false, false, false]
[ , , , , ]
[null, null, null, null, null]
数组内存的理解
数组是引用数据类型、、非8种基本数据类型
涉及栈和堆
声明=赋值
声明在栈中 赋值在堆内 通过地址关联
测试代码
int num1=12;
int num2=num1;
num2=10010;
System.out.println(num1);
System.out.println(num2);
int[] int1={1,2,3};
int[] int2=int1; //这里赋值的是int1的地址
int2[0]=99;
System.out.println(Arrays.toString(int1));
System.out.println(Arrays.toString(int2));
//改int2的0值,实际上改的int1和int2共用的地址,2改1改,一荣俱荣一损俱损
输出结果
12
10010
[99, 2, 3]
[99, 2, 3]
拷贝数组的方法
// 1、Arrays.copyOf(要拷贝是数组名,目标长度)
// 2、ASystem.arraycopy(原数组,原数组起始索引,目标数组名,目标数组起始索引)
int[] ints={1,2,3,4,5,6,7,8,9,10};
int[] rra =Arrays.copyOf(ints,5);
System.out.println("这是方法1"+Arrays.toString(rra));
int[] arr =new int[8];
System.arraycopy(ints,1,arr,1,4);
System.out.println("这是方法2"+Arrays.toString(arr));
作业
作业1
定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变
代码
public static void main(String[] args) {
int [] ints={1,2,3,4,5,6};
for(int j: ints){
if(j%2==0)
System.out.println(" "+j);
else{
System.out.println(j);
}
}
}
测试结果
1
2
3
4
5
6
作业2
有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
作业3
已知2019年是猪年,请在控制台输出从1949年到2019年中所有是猪年的年份。
源代码
for(int i=1949;i<=2019;i++){
if((2019-i)%12==0){ //难点还是在计算2019-i)%12余0;2019往回算每隔开12年计数一次
System.out.println(i);
}
}
测试结果
1959
1971
1983
1995
2007
2019