静态初始化和动态初始化的区别:
动态初始化:手动指定数组的长度,有系统分配初始值,适用于,只明确数值个数嘛,不明确元素内容
例如:使用数组容器录入键盘录入的元素 int[] arr=new int[5];
静态初始化,手动指定数组的元素,系统会根据元素的个数,自动开辟出相应数组大小
适用于,需求中已经明确要操作的内容,直接初始化即可。
数组的遍历使用for循环遍历
数组的最大值与最小值,都是假设第一个元素为最大值或者最小值,然后依次与数组中元素进行比较即可
数组操作的常见两个问题
索引越界:访问数组中没有的索引,造成数组越界问题
空指针异常:访问的数组已经不在指向堆内存的数据,造成空指针异常
null:空值,引用的数据类型的默认值,表示不在指向任何有效对象
多个数组指向同一个地址
没有New就不会开辟新的地址
把arr的地址给了arr2
造成多个数组指向同一个地址
当有两个数组指向同一个数组时,看到都是改变后的
Int [] arr=new int[1];
例如arr[0]=1;
int arr2[]=arr;
arr2[0]=3;
输出的就是3为最后一次,如果没有进行New的操作则不会在内存中开辟新的地址,只是将arr地址赋值给arr2两个数组指向同一个地址
public class test5 {
/*
评委打分:在编程比赛中,有六个评委为参赛选手打分,分数为0-100的整数分
选手的最后得分为:去掉一个最高分和一个最低分后四个评委的平均值(不考虑小数部分)
思路:定义一个动态数组,长度为6
键盘录入评委的评分
由于是6个评分,所以,接受评委分数的操作用循环
求出最大值和最小值
求出数组总和
按照计算规则计算得平均分
输出平均分
*/
public static void main(String[] args) {
System.out.println("-------------评委打分计算-----------");
Scanner sc = new Scanner(System.in);
int arr[]=new int[6];
System.out.println("请输入第一个评委的分数");
arr[0] = sc.nextInt();
System.out.println("请输入第二个评委的分数");
arr[1] = sc.nextInt();
System.out.println("请输入第三个评委的分数");
arr[2] = sc.nextInt();
System.out.println("请输入第四个评委的分数");
arr[3] = sc.nextInt();
System.out.println("请输入第五个评委的分数");
arr[4] = sc.nextInt();
System.out.println("请输入第六个评委的分数");
arr[5] = sc.nextInt();
int sum=0;
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
}
//找出最大值
int max=arr[0];
for (int i = 0; i < arr.length; i++) {
if(arr[0]<arr[i]){
max=arr[i];
}
}
System.out.println("评分最高位:"+max);
//找出最小值
int min=arr[0];
for (int i = 0; i < arr.length; i++) {
if(arr[0]>arr[i]){
min=arr[i];
}
}
System.out.println("评分最小位:"+min);
int sum1=(sum-max-min)/4;
System.out.println("最终评分位:"+sum1);
}
}