数组的定义、作为方法参数传递、作为方法的返回值

1.1 数组的定义

方式一:

  • 格式:数组存储的数据类型【】数组名字=new 数组存储的数据类型【长度】;
  • 数组存储的数据类型:创建的数组容器可以存储什么数据类型。
  • 【】:表示数组。
  • 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
  • new:关键字。
  • 数组存储的数据类型:创建的数组容器可以存储什么数据类型。
  • 【长度】:数组的长度,表示数组容器中可以存储多少个元素。
  • 注意:数组有定长的特性,长度一旦指定,不可更改
  • 例如:int [] arr=new int[5];

方式二:

  • 格式:数据类型 【】 数组名=new 数据类型【】{元素1,元素2,元素3...};
  • 注意:给定了具体的元素就不能给定长度
  • 例如:int [] arr=new int{23,4,54,324,2};

 方式三:

  • 格式:数据类型 【】 数组名={元素1,元素2,元素3...};
  • 例如:int [] arr={12,34,5446,5,45};

1.2 数组的访问

  •  直接输出数组名,显示的是数组的地址,如下面示例代码中[I@50cbc42f
  • 索引:每一个存储到数组的元素,都会自动拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
  • 通过索引访问数组中的元素:
  1. 数组名【索引】,获取出数组中的元素
  2. 数组名【索引】=数组,为数组中的元素赋值。
  •   定义一个空数组,动态初始化创建的数组,java会有默认值
      int[]的默认值是0,double[]默认值是0.0,boolean[]的默认值是false
            int [] arr2=new int[4];
            System.out.println(arr2[0]);//0
            double[] arr3=new double[4];
            System.out.println(arr3[0]);//0.0
            boolean[] arr4=new boolean[4];
            System.out.println(arr4[0]);//false
  • 数组的长度属性:每个数组都具有长度,而且是固定的,获取数组的长度格式:数组名.length,数组的最大索引值为:数组名.length-1
public class ArrayDemo {
    public static void main(String[] args) {
        //定义数组
        int [] arr = {10,20,30,40};

        //直接输出数组
        System.out.println(arr);//[I@50cbc42f

        //通过索引获取数组元素
        System.out.println(arr[0]);//10
        System.out.println(arr[1]);//20
        System.out.println(arr[2]);//30
        System.out.println(arr[3]);//40

        System.out.println("------------");
        //通过索引修改数组元素
        arr[2]=100;
        System.out.println(arr[0]);//10
        System.out.println(arr[1]);//20
        System.out.println(arr[2]);//100
        System.out.println(arr[3]);//40

        System.out.println("--------------");
        /*
            定义一个空数组,动态初始化创建的数组,java会有默认值
            int[]的默认值是0,double[]默认值是0.0,boolean[]的默认值是false
         */
        int [] arr2=new int[4];
        System.out.println(arr2[0]);//0
        double[] arr3=new double[4];
        System.out.println(arr3[0]);//0.0
        boolean[] arr4=new boolean[4];
        System.out.println(arr4[0]);//false
    }
}

2.1 数组原理内存图-内存概述

  • 内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。
  • java虚拟机要运行程序,必须要对内存进行空间分配和管理。

 2.2 java 虚拟机的内存划分

  •  JVM的内存划分
  • 方法栈:方法运行时 使用的内存,比如main方法运行,进入方法栈中执行。(即方法进栈执行
  • 堆内存:存储对象或者数组,new来创建的,都存储在堆内存。(看到new就想到存储在堆内存中
  • 方法区:存储可以运行的class文件。
  • 本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关。
  • 寄存器:给CPU使用,和我们开发无关。

3.1 数组作为方法参数

  • 数组作为方法参数传递,传递的参数是数组内存的地址值
public class ArrayDemo01 {
    public static void main(String[] args) {
        int [] arr=new int[]{11,22,33,44,55};
        System.out.println("arr="+arr);//arr=[I@58ceff1

        printArray(arr);//arr=[I@58ceff1传递的是地址值
    }
    /*
        定义方法,用于打印int类型数组中的内容
        返回值类型:打印完了就可以了,不需要返回值,void
        参数列表:打印哪个数组不确定,作为参数列表
        输出作为参数,实际传递的是地址值
     */
    public static void printArray(int[] a){
        System.out.println("a="+a);//a=[I@58ceff1
        //遍历数组
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

3.2 数组作为方法返回值

  • 数组作为方法的返回值,返回的是数组的内存地址 
public class ArrayDemo02 {
    public static void main(String[] args) {
        int[] a=getArray();
        System.out.println("a="+a);//a=[I@58ceff1
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
    /*
        数组可以作为返回值类型
     */
    public static int[] getArray(){
        int[] arr=new int[]{11,22,33,44,55};
        System.out.println("arr="+arr);//arr=[I@58ceff1
        return arr;
    }
}

  • 打印一副扑克
/*
    打印一副扑克牌
    代码实现,效果如图所示:
    黑桃A 黑桃2 黑桃3 黑桃4 黑桃5 黑桃6 黑桃7 黑桃8 黑桃9 黑桃10 黑桃J 黑桃Q 黑桃K
    红桃A
    梅花A
    方片A

    使用两个字符串组,分别保存花色和点数
 */
public class Demo09 {
    public static void main(String[] args) {
        //定义字符串数组,保存花色和点数
        String [] hs={"黑桃","红桃","梅花","方片"};
        //定义数组存放点数
        String [] ds={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
       //外循环遍历花色数组
        for (int hsIndex = 0; hsIndex < hs.length; hsIndex++) {
                //内循环遍历点数
            for (int dsIndex = 0; dsIndex < ds.length; dsIndex++) {
                System.out.print(hs[hsIndex]+ds[dsIndex]+" ");

            }
            System.out.println();
        }


    }
}
  • 定义方法比较两个数组是否完全一致
/*
    定义equals方法,比较2个数组内容是否完全一致。
    代码实现,效果如图所示:
    [1,2,3,4,3,2,1]
    [1,2,3,4,3,2,1]
    是否一致:true

    开发提示:
    长度一致,内容一致,就认为是完全一致。
 */
public class Demo07 {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 3, 2, 1};
        int[] arr2 = {1, 2, 3, 4, 3, 2, 1};
        System.out.println("是否一致:"+equal(arr1,arr2));

    }

    /*
        返回值类型:boolean
        参数列表:int [] arr1,int [] arr2
     */
    //定义equals方法,参数列表为:(int[]?arr1,?int[]?arr2),?
    // 返回值类型为:boolean,equals方法 的功能是比较arr1数组和arr2数组内容是否一致.
    public static boolean equal(int[] arr1, int[] arr2) {
        //在equals方法中判断arr1和arr2的长度是否相等,如果不相等返回false
        if (arr1.length != arr2.length) {
            return false;
        }

        //在equals方法中遍历arr1数组,判断arr1和arr2的每个元素是否相等.如果不相等返回false
        for (int i = 0; i < arr1.length; i++) {
            if(arr1[i] != arr2[i]){
                return false;
            }
        }
        return true;
    }
}
  • 评委给选手打分求平均值
/*
    有一个编程比赛,有5个评委给选手打分,取消最高分和最低分后的平均分就是这个选手的最后得分,这个评委的评分为:
    {99,100,98,97,96};

    分析:
    1.5个评委的评分使用数组保存起来,方便操作。
    2.找到最高分,找到最低分
    3.计算总分
    4.有效总分=总分-最高分-最低分
    5.计算平均分=有效总分/人数
 */
public class Test0403 {
    public static void main(String[] args) {
        int [] arr={99,100,97,96};
        int max=arr[0];
        int min=arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>max){
                max = arr[i];
            }else if(arr[i]<min){
                min=arr[i];
            }
        }
        System.out.println("max="+max);
        System.out.println("min="+min);

        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.println("sum="+sum);
        int sum1=sum-max-min;
        int avg=sum1/(arr.length-2);
        System.out.println("平均值是:"+avg);
    }
}
  • 数组反转
/*
    数组反转:数组中的元素颠倒顺序,例如原始数组为1,2,3,4,5,反转后的数组为5,4,3,2,1
    实现思想:数组最远端的元素互换位置。
        实现反转,就需要将数组最远端元素位置交换
        定义两个变量,保存数组的最小索引和最大索引
        两个索引上的元素交换位置
        最小索引++,最大索引--,再次交换位置
        最小索引超过了最大索引,数组反转操作结束
 */
public class Prepare09 {
    public static void main(String[] args) {
        //定义变量记录小索引:start=0
        //定义变量记录大索引:end=arr.length-1
        //循环终止条件:start<end才需要交换位置
        int []arr={11,22,33,44,55};
        for(int start=0,end=arr.length-1;start<end;start++,end--){
            //循环交换位置,利用第三方变量
            int temp=arr[start];
            arr[start]=arr[end];
            arr[end]=temp;
        }

        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Huangyuhua068/article/details/81417219