Java基础 数组 内存图 数组常用操作 综合案例 评委打分

Java基础

一、数组

1.什么是数组

  • 数组就是一个容器,用来存储多个数据类型相同的数据!

2.数组的动态初始化

  • 动态初始化:创建数组的时候没有具体的数据。只给定数组的长度
  • 格式 : 数据类型[] 数组名 = new 数据类型[长度];
例如
int[] arr1 = new int[3];//创建一个长度为3的int类型的数组
double[] arr2 = new double[3];//创建一个长度为3的double类型的数组

3.数组索引

  • 索引:就是数组元素的编号,编号从0 开始
  • 获取数组元素:数组名[索引];
    在这里插入图片描述

例如

public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[10];//创建了一个长度为10的int类型的数组
        arr[0]=11;//给他第一个元素赋值
        arr[1]=22;//给他第二个元素赋值
        arr[2]=33;//给他第三个元素赋值
        System.out.println(arr[0]);//输出数组中的第一个元素
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

在这里插入图片描述

4.数组动态初始化的默认值

整形 0
浮点 0.0
布尔 false
字符 ‘\u0000’(空)
字符串(引用类型) null

  • 当数组动态初始化后,不给元素赋值,虚拟机会给他默认值

例如

public class Demo {
    public static void main(String[] args) {
        int[] arr1 = new int[3];//创建了一个长度为3的int类型的数组
        System.out.println(arr1[0]);
        char[] arr2 = new char[3];//创建了一个长度为3的char类型的数组
        System.out.println(arr2[0]);
        String[] arr3 = new String[3];//创建了一个长度为3的String类型的数组
        System.out.println(arr3[0]);
        double[] arr4 = new double[3];//创建了一个长度为3的double类型的数组
        System.out.println(arr4[0]);
    }
}

在这里插入图片描述

5.数组的静态初始化

  • 静态初始化:在创建数组的时候就给他赋值
例如
public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[]{11,22,33};
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

在这里插入图片描述

6.数组的内存图

  • Java中的内存分配
    • 栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中
    • 堆内存:new出来的内容都会进入堆内存,并且会存在地址值
    • 方法区:字节码文件(.class文件)加载时进入的内存
    • 本地方法栈:调用操作系统相关资源 (现阶段了解即可)
    • 寄存器:交给CPU去使用(现阶段了解即可)
单个数组内存图
public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        arr[0]=11;
        arr[1]=22;
        arr[2]=33;
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

在这里插入图片描述
方法执行完弹栈

多个数组内存图(理解了单个,多个与他相似)
public class Demo {
    public static void main(String[] args) {
        int[] arr1 = new int[3];
        int[] arr2 = new int[3];
        arr1[0]=11;
        arr1[1]=22;
        arr1[2]=33;
        arr2[0]=44;
        arr2[1]=55;
        arr2[2]=66;
        System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println("-----------------");
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
}

在这里插入图片描述

多个数组变量指向相同的内存地址 的内存图
public class Demo {
    public static void main(String[] args) {
        int[] arr1 = new int[3];
        arr1[0]=11;
        arr1[1]=22;
        arr1[2]=33;
        int[] arr2 = arr1;
        arr2[2] = 44;
        System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println("-----------------");
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
}

在这里插入图片描述

7.数组的常见问题

数组索引越界异常(ArrayIndexOutOfBoundsException)
  • 当访问的数组元素超出索引范围会报错
public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[3];//长度为3的数组
        arr[0]=11;
        arr[1]=22;
        arr[2]=33;
        //System.out.println(arr[3]);//索引值只有0 1 2 访问3 就会出现异常
    }
}

在这里插入图片描述

空指针异常(NullPointerException)
  • 当数组变量指向null就会出现空指针异常
public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        arr[0]=11;
        arr[1]=22;
        arr[2]=33;
        arr=null;
       // System.out.println(arr[0]);//此处访问就会报空指针异常
        //System.out.println(arr[3]);
    }
}

在这里插入图片描述

注意:当堆里的对象没有被指向的时候jvm会自动回收垃圾,释放内存。

8.数组常见的操作

  • 数组的遍历
public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[]{11,22,33,44,55};
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");//遍历数组是取出数组元素的过程可以用循环完成 i 代表数组的索引
        }
    }
}

在这里插入图片描述

  • 求数组中的最大值
public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[]{11,22,33,44,55};
        int max=arr[0];//定义一个max用来存储最大值  先让他等于数组中的第一个元素
        for (int i = 1; i < arr.length; i++) {
            if (max<arr[i]){//用它和数组中的其他元素依次比较 如果比他大就把大的值赋给他
                max=arr[i];
            }
        }
        System.out.println(max);//55
    }
}
  • 给数组初始化,键盘录入数据赋值,然后求数组的和
public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[5];
        Random r = new Random();
        int sum=0;//定义一个求和变量
        for (int i = 0; i < arr.length; i++) {
            arr[i]=r.nextInt(49)+1;//获取0-49的随机数
            sum+=arr[i];//求和
        }
        System.out.println(sum);
    }
}
  • 查找元素索引
public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[]{11,22,33,44,55};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入查询的数:");
        int a = sc.nextInt();
        int index=-1;//定义一个临时变量用来存储索引值,刚开始状态为没找到,所以给他赋值一个-1(因为数组元素从0 开始)
        for (int i = 0; i < arr.length; i++) {
           if (arr[i]==a){//如果有就把索引赋值给变量然后结束循环
               index=i;
               break;
           }
        }
        System.out.println(index);//输出-1就代表不存在
    }
}

注意:这个程序如果数组里有多个相同的数,只能找出第一个,可以再定义一个数组用来存储索引值,最后遍历。

综合案例(评委打分)

在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 选手的最后得分为:去掉一个最高分和一 个最低分后 的4个评委平均值
(不考虑小数部分)。

public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[6];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入0-100之间的数据:");
            int score = sc.nextInt();
            if (score>=0&&score<=100){//判断输入的成绩是否在0-100之间 如果在则赋值
                arr[i]=score;
            }else {//如果不在就给出错误提示并且要重新输入  让他索引值减1 就能实现重新输入
                System.out.println("您输入的数据有误,请重新输入");
                i--;
            }
        }
        //求最大值最小值  求和
        int max=arr[0];
        int min=arr[0];
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            if (max<arr[i]){//求最大
                max=arr[i];
            }
            if (min>arr[i]){//求最小
                min=arr[i];
            }
            sum+=arr[i];
        }
        //去掉一个最高分和一 个最低分后 的4个评委平均值
        System.out.println((sum-max-min)/4);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值