(一)定义
(1)声明,2种:int[ ] arr 或 int arr[ ]
(2)开辟空间,动态分配方式和静态分配方式:
动态分配方式:不能确定元素的具体值是多少,先开辟空间大小,再逐个赋值
静态分配方式:确定元素的值是多少,在声明的同时直接赋值
//动态
int[] arr1 = new int[3];
for(int i=0;i<arr1.length;i++){
arr1[i] = i;
}
//静态
int[] arr2 = {1,2,3};
(二)注意细节
1.数组的元素可以是任意类型,包括基本类型和引用类型,但是不能混用
2.数组中的元素满足自动转型原则,比如double类型的数组中可以存储int整数,这是因为整数已经自动转成double,但是int类型的数组中不能存放string类型或者double类型,因为不能自动转换(编译不通过)
3.数组创建后都有默认值,布尔类型默认是false,引用类型默认是null,char类型默认是\u0000(这里的\u表示十六进制的意思),其他的类型都默认对应的0
4.数组越界时实在运行的时候检查的,在编译的时候不会检查
(三)练习
定义练习!!!
下列数组定义正确的有:
A.String strs[] = {'a','b','c'};//错误,因为是字符串数组,不能存储字符
B.String[] strs = {"a","b","c"};//正确
C.String[] strs = new String{"a","b","c"}//错误,静态和动态混用了
D.String strs[] = new String[]{"a","b","c"}//!!!正确
E.String[] strs = new String[3]{"a","b","c"}//错误,静态和动态混用了
//1.在数组中存放26个大写英文字母并打印出来
//1.在数组中存放26个大写英文字母并打印出来
char[] chars = new char[26];
for(int i=0;i<chars.length;i++){
chars[i] = (char)('A'+i);//这里的('A'+i)是int类型,要进行强制类型转换
}
for(int i=0;i<chars.length;i++){
System.out.print(chars[i]+" ");
}
//2.找出数中的最大值
//2.找出数中的最大值
int[] arr4 = {5,3,1,6};
int max = arr4[0];
int maxIndex = 0;
for(int i=0;i<arr4.length;i++){
if(max<arr4[i]){
max = arr4[i];
maxIndex = i;
}
}
System.out.print("max="+max+" index= "+maxIndex);
//3.求和,求平均值
double[] arr5 = {2.4,3.5,23.3,4};
double sum = 0;
for(int i=0;i<arr5.length;i++){
sum+=arr5[i];
}
double avg = sum/ arr5.length;
System.out.println("sum="+sum+" avg="+avg);
求解第3题时发现下面小细节:
//整除运算,在两端都是整数时,最后的结果是向下取整,如果接收的变量为整型则结果为整型,如果为浮点型,则转为浮点型
// 若有一个为浮点数,则结果为浮点数,并且不能用int保存
System.out.println(2/3);//0
System.out.println(2/3.0);//0.6666666666666666