day 05

01 数组概括和定义格式   02 数组的初始化动态初始化   03 Java的内存分配以及栈和堆的区别   04 数组的静态初始化   05 数组索引越界异常和空指针异常   06 数组遍历   07 数组获取最值   08 数组操作反转   09 数组查表法   10 数组基本查找   11 二维数组的概括和格式

 

 

01 数组概括和定义格式

数组(容器):为了存储同种数据类型多个值
    概念:数组时存储同一种数据类型多个元素的集合。也可看成一个容器。
        数组既可以存储基本数据类型,也可以存储引用数据类型。

===
02 数组的初始化动态初始化    //Array 数组
    

    数组的初始化:就是为数组开辟连续的内存空间,并为每个数组元素赋予值
    对数组进行初始化:
    动态初始化 只指定长度,由系统给出初始化值
    静态初始化 给出初始化值,由系统决定长度
    //数据类型[] 数组名 = new 数据类型[数组长度];
    int[] arr = new int[5];//动态初始化,在内存中开辟连续的五块空间
    //系统给出的默认初始值,整数类型都为0
    //整数类型:byte,short,int,long默认初始化值都是0
    //浮点类型:float,double默认初始化值都是0.0
    //布尔类型:boolean默认初始化值false
    //字符类型:char默认初始值'\u0000'
    //    [I@15db9742    [代表数组,几个就代表几维    
    //    I代表int类型  
    //    @是固定的   
    //     15db9742代表的时十六进制的地址值
    System.out.println(arr);// [I@15db9742   数组的地址值

===
03 Java的内存分配以及栈和堆的区别


    栈:存储局部变量        局部变量:定义在方法声明上和方法中的变量
    栈:先进后出
    堆:存储new出来的数组和对象

===
04 数组的静态初始化


    格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
    简化格式:数据类型[] 数组名 = {元素1,元素2,...};    
    //简写形式声明和赋值在同一行
    //不允许动静结合

===
05 数组索引越界异常和空指针异常


        //a:ArrayIndexOutOfBoundsException:数组索引越界异常
        //原因:你访问了不存在的索引,会出现索引越界
        //b:NullPointerException:空指针异常
        //原因:数组已经不再指向堆内存了,而你还用数组名去访问元素,
        int[] arr = new int[5];
        //System.out.println(arr[-1]);    //a
        arr = null;
        System.out.println(arr[0]);        
        //b:当数组引用辅助位null,再去调用数组中元素就会出现空指针异常

===
06 数组遍历


    public static void main(String[] args){
        int[] arr = {11,22,33,44,55};
        for(int i = 0;i < 5;i++){
            System.out.println(arr[i]);
        }
        System.out.println(arr.length);    //arr.length代表的是数组的长度
        for(int i = 0;i < arr.length ;i++){
            System.out.println(arr[i]);
        }
        int[] arr2 = {3,4,5};
        print(arr2);
    }
    //数组的遍历
    //1,返回值类型
    //2,参数列表int[] arr
    public static void print(int[] arr){
        for(int i = 0;i < arr.length ;i++){
            System.out.print(arr[i] + " ");
        }
    }

===
07 数组获取最值


    public static void main(String[] args){
        int[] arr = {-11,-22,-33,-44,-55};
        int max = getMax(arr);
        System.out.println(max);
    }
    //获取数组中最大值
    //1,返回值类型int
    //2,参数列表int[] arr
    public static int getMax(int[] arr){
        int max = arr[0];
        for(int i = 1;i < arr.length ;i++){    //从数组的第二个元素开始遍历
            if(max < arr[i]){                //如果max记录的值小于的数组中的元素
                max = arr[i];                //max记录住较大的
            }
        }
        return max;
    }

===
08 数组操作反转


    public static void main(String[] args){
        int[] arr = {11,22,33,44,55};
        reverseArray(arr);    //反转
        print(arr);            //打印
    }
    /*
     * 数组元素反转
     * 1,明确返回值类型void
     * 2,明确参数列表int[] arr;
     */
    public static void reverseArray(int[] arr){
        for(int i = 0;i < arr.length / 2;i++){
            // arr[0]和arr[arr.length-1-0]交换
            // arr[1]和arr[arr.length-1-1]交换
            // arr[2]和arr[arr.length-1-2]交换
            int temp = arr[0];
            arr[0] = arr[arr.length-1-i];
            arr[arr.length-1-i] = temp; 
        }
    }
    /*
     * 数组遍历
     * 1,明确返回值类型
     * 明确参数列表int[] arr
     */
    public static void print(int[] arr){
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }

===
09 数组查表法


/*
 * 数据查表法(根据键盘录入索引,查找对应星期)
 */
import java.util.Scanner;
public class Demo5_Array {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入对应的星期范围在1-7:");
        int week = sc.nextInt();
        System.out.println("星期"+getWeek(week));
    }
    /*
     * 根据索引返回相应日期
     * 1,返回值类型char
     * 2,参数列表int week
     */
    public static char getWeek(int week){
        //定义一张星期表
        char[] arr = {' ','一','二','三','四','五','六','日',};
        //通过索引获取表中元素
        return arr[week];
    }
}

===
10 数组基本查找


    数组元素查找(查找指定元素第一次在数组中出现的索引)
public class Demo6_Array {
    public static void main(String[] args){
        int[] arr = {11,22,33,44,55};
        int index = getIndex(arr,22);
        System.out.println(index);
    }
    /*
     * 查找元素索引
     * 1,返回值类型 int
     * 2,明确参数列表,int[] arr,int value
     */
    public static int getIndex(int[] arr,int value){
        for(int i = 0;i < arr.length;i++){    //数组的遍历
            if(arr[i] == value){            //如果数组中的元素与查找的元素匹配
                return i;
            }
        }
        return -1;
    }
}

===
11 二维数组的概括和格式


     二维数组格式    int[][] arr = new int[3][2];
//定义二维数组,输出二维数组名称,一维数组名称,一个元素
public class Demo1_Array {
    public static void main(String[] args){
        int[][] arr = new int[3][2];
        /*
         * 这是一个二维数组
         * 这是二维数组中有3个以为数组
         * 每一个数组中有2个元素
         */
        /*
         [[I@15db9742    //二维数组
         [I@6d06d69c    //一维数组
         0
         */
        System.out.println(arr);        //二维数组
        System.out.println(arr[0]);        //二维数组中第一个一维数组
        System.out.println(arr[0][0]);    //二维数组中第一个一维数组中第一个元素6
    }
}
//格式: int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
public class Demo2_Array {
    public static void main(String[] args){
        int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
        System.out.println(arr);        //[[I@15db9742  二维数组的地址值
        System.out.println(arr[0]);        //[I@6d06d69c  一维数组的地址值
        System.out.println(arr[0][0]);    //1二维数组第一个一维数组的第一个数字
    }
}
//test    //二维数组遍历
        int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
        for(int i = 0;i < arr.length;i++){    //获取到每个二维数组中的一维数组
            for(int j = 0;j < arr[i].length;j++){//获取每个一维数组中的元素
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
        //求和
        int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
        int sum = 0;    //定义变量,记录每次相加的结果
        for(int i = 0;i < arr.length;i++){
            for(int j = 0;j < arr[0].length;j++){
                sum = sum + arr[i][j];
            }
        }
        System.out.println(sum);
    }
//基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
//引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问
//Java中既是传值也是传地址,基本数据类型传递的值,引用数据类型传递的地址
//Java中只有传值,因为地址值也是值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值