最简洁的Java基础概述,数组

目录

一、数组的定义

        1、静态初始化数组(定义数组的时候直接给数组赋值)

        2、动态初始化数组(定义数组的时候只确定数组的类型和长度,之后再存入具体的数据)

        3、数组的访问(数组名称[索引])

        4、数组的几个注意事项

二、数组的遍历

        1、定义

        2、为什么要遍历?

三、数组的案例

        1、数组元素求和

        2、数组求最大值

        3、猜数字游戏

        4、随机排名

        5、数组排序

四、数组的内存图

        1、Java内存分配、数组内存图

        2、两个变量指向同一个数组

五、数组使用的常见问题

        1、访问元素位置超过最大索引,出现数组索引越界异常;

        2、数组变量中没有存储数组的地址,而是null,在访问数组信息时会出现空指针异常;

六、Debug工具的使用

        1、Debug工具

        2、Debug工具基本使用步骤


一、数组的定义

        数组就是用来存储一批同类型数据的内存区域(可以理解为容器);

        1、静态初始化数组(定义数组的时候直接给数组赋值)

               格式:数据类型        数组名[ ]    =      {值1;值2……值n};

        2、动态初始化数组(定义数组的时候只确定数组的类型和长度,之后再存入具体的数据)

               格式:数据类型        数组名[ ]    =      new    数据类型[ n ];

               动态初始化数组的元素默认值:

             

        3、数组的访问(数组名称[索引])

                数组长度:length;

                数组的最大索引:length - 1;

        4、数组的几个注意事项

                “数据类型[ ]        数组名”也可以写成“数据类型        数组名[ ]”;

                什么类型的数组存放什么类型的数据,否则报错;

                数组一旦定下来了,程序执行过程中,数组类型,长度就固定了;

二、数组的遍历

        1、定义

                就是一个个的数据访问;

        2、为什么要遍历?

                搜索、数据统计等等都需要用到遍历;

三、数组的案例

        1、数组元素求和

                需求:某部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额。

public class Demo{
    public static void main(String args[]){
        //采用数组的静态初始化;
        int[] arr = {16,26,36,6,100};
        int sum = 0;

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

        System.out.println("sum = " + sum);
    }
}

        2、数组求最大值

                需求:某部门5名员工的销售额分别是:16、26、36、6、100,请找出销售额的最大值。

public class Demo{
    public static void main(String args[]){
        //采用数组的动态初始化;
        int[] arr = new int[5];
        arr[0] = 16;
        arr[1] = 26;
        arr[2] = 36;
        arr[3] = 6;
        arr[4] = 100;

        int max = arr[0];
        int maxIndex = 0;

        for(int i = 1;i < arr.length;i++){
            if(max < arr[i]){
                int temp = arr[i];
                arr[i] = max;
                max = temp;
                maxIndex = i;
            }
        }

        System.out.println("第" + (maxIndex + 1) + "号员工的销售额最高,其销售额为:" + max);
    }
}

        3、猜数字游戏

                需求:开发一个幸运小游戏,游戏规则如下:

                           游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:

                           >未猜中提示:“未命中”,并继续猜测;

                           >猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的位置,且输出全部5个数据,最终结束本游戏。

import java.util.Random;
import java.util.Scanner;

public class Demo{
    public static void main(String args[]){
        //定义随机类对象和扫描器对象;
        Random random = new Random();
        Scanner scanner = new Scanner(System.in);

        //用一个数组存放5个1-20之间的随机数
        int[] arr = new int[5];
        for(int i = 0;i < arr.length;i++){     
            arr[i] = random.nextInt(20);
        }

        OUT:
        while(true){
            System.out.println("请输入你要猜的数:");
            int c = scanner.nextInt();
            for(int i = 0;i < arr.length;i++){
                if(c == arr[i]){
                    System.out.println("运气不错,猜中了,该数第一次出现的索引值为:            " + i);
                    break OUT;
                }
            }
            System.out.println("未命中,继续猜测");
        }

        //输出全部的5个数;
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i] + " ");
        }
    }
}

        4、随机排名

                需求:某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。

                           请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。

import java.util.Scanner;

public class Demo{
    public static void main(String args[]){
        //用扫描器将5名员工工号存入数组中;
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[5];
        for(int i = 0;i < arr.length;i++){
            System.out.println("请输入第" + (i + 1) + "位员工的工号:");
            arr[i] = sc.nextInt();
        }

        //用Random类随机打乱数组;
        for(int i = 0;i < arr.length;i++){
            Random r = new Random();
            int index = r.nextInt(5);
            int temp = arr[index];
            arr[index] = arr[i];
            arr[i] = temp;
        }

        //输出打乱后的随机数组;
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i] + " ");
        }
    }
}      

        5、数组排序

  • 就是对数组中的元素进行升序(由小到大)或降序(由大到小)的操作;
  • 数组的排列技术;
    • 冒泡排序法;
      • public class Demo{
            public static void main(String args[]){
                int[] arr = {8,6,24,23,12};
        
                //排序前的数组;
                print(arr);
        
                for(int i = 0;i < arr.length - 1;i++){
                    for(int j = 0;j < arr.length - 1 - i;j++){
                        if(arr[j] > arr[j+1]){
                            int temp = arr[j+1];
                            arr[j+1] = arr[j];
                            arr[j] = temp;
                        }
                    }
                }
        
                //排序后的数组;
                print(arr);
            }
        
            public static void print(int[] a){
                for(int i = 0;i < a.length;i++){
                    System.out.print(a[i] + " ");
                }
                System.out.println();
            }
        }
    • 选择排序法;
    • 快速排序法;
    • 插入排序法;
    • ……
  • 数组搜索的相关技术
    • 二分搜索;
    • 分块查找;
    • 哈希表查找;
    • ……

四、数组的内存图

        1、Java内存分配、数组内存图

  • 方法区:字节码加载时进入的内存;
  • 栈内存:方法运行时进入的内存,变量也是在这里
  • 堆内存:new出来的东西会在这片内存开辟空间并产生地址;

        2、两个变量指向同一个数组

int[ ] arr1 = {8,23,24,81};

int[ ] arr2;

arr2 = arr1;

System.out.println(arr1[2]);

System.out.println(arr2[2]);

        两条输出语句的结果都为“24",在执行arr2 = arr 1语句时,程序将arr1的地址复制给了arr2,所以在访问堆内存区域的数据时,索引值为2的对应值都为24。

五、数组使用的常见问题

        1、访问元素位置超过最大索引,出现数组索引越界异常;

        2、数组变量中没有存储数组的地址,而是null,在访问数组信息时会出现空指针异常;

六、Debug工具的使用

        1、Debug工具

                IDEA自带的断点(调试)工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序的执行过程。

        2、Debug工具基本使用步骤

                在需要控制的代码左侧,点击一下,形成断点;

                选择使用Debug方式启动程序,启动后程序会在断点暂停;

                控制代码一行一行的往下执行;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值