第四章 数组
1.定义
数组是存储多个变量的容器,这些变量的数据类型要一致。
2.初始化
动态初始化:
数据类 [ ] 数组名= new 数据类型[数组长度];
此时的内存分配:
如果两个数组拿的是同一个堆内存的地址,任何一个数组对堆内存数据进行了修改,另一个访问到的也是修改过的。
public static void main(String[] args) {
int[] arr=new int[3];
int[] arr2=arr;
System.out.println(arr);
System.out.println(arr2);
System.out.println("-----------------------");
arr[0]=100;
arr2[0] = 200;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr2);
System.out.println(arr2[0]);
}
结果:
[I@16b98e56
[I@16b98e56
-----------------------
[I@16b98e56
200
[I@16b98e56
200
Process finished with exit code 0
静态初始化 :
数据类型[ ] 数组名= new 数据类型[ ]{元素1,元素2…};
简化成:数据类型[ ] 数组名={元素1,元素2…};
内存分配:
3.常见问题
public class keyword {
//两个常见问题:
// ArrayIndexOutOfBoundsException(数组索引越界)
// NullPointerException(空指针异常)
public static void main(String[] args) {
int[] arr={1,2,3};
System.out.println(arr[3]);
int[] arr2=null;
System.out.println(arr2[1]);
}
}
内存理解;
4.实例:
例1:
public class keyword {
//评委打分问题
public static void main(String[] args) {
int[] arr= new int[6];
Scanner sc=new Scanner(System.in);
System.out.println("请输入6个评委的打分:");
for(int x=0;x<arr.length;x++){
int score= sc.nextInt();
arr[x]=score;
}
int max=arr[0];
int min=arr[0];
int sum=0;
for(int x=0;x<arr.length;x++){
if (arr[x]>max){
max=arr[x];
}
if(arr[x]<min){
min=arr[x];
}
sum+=arr[x];
}
int avg=0;
avg=(sum-max-min)/4;
System.out.println("最终得分是:"+avg);
}
}
结果:
请输入6个评委的打分:
78
86
90
92
65
77
最终得分是:82
Process finished with exit code 0
例2:
public class keyword {
//不死神兔问题,问到第20个月有多少兔子
public static void main(String[] args) {
int s =1;
int[] arr= new int[20];
arr[0]=1;
arr[1]=1;
for(int x=2;x<20;x++){
s=arr[x-1]+arr[x-2];
arr[x]=s;
}
System.out.println(arr[19]);
}
}
结果:
6765
Process finished with exit code 0