• 第四章:数组


    第四章:数组


    数组的定义

    数组是一个相同类型的有序集合。
    特点:
    1.数组的长度一旦声明指定后,无法更改
    2.数组中的数据类型不能混合(数组中元素的数据类型不能混合存储)。


    数组的声明

    数据类型[] 数组名;

    数据类型 数组名[];
    eg:
    int nums[];
    int[] nums;
    数组在声明时并未分配空间。


    数组的初始化

    1.声明数组
    数据类型[] 数组名;
    2.初始化
    数组名 =new 数据类型[长度];

    数组的长度:数组中能容纳最大元素的个数。
    数组的下标:表示数组中元素存储位置,其存取范围[0,数组的长度-1].
    eg:
    int[] nums;
    nums=new int[5];


    数组初始化并赋值
    动态初始化

    数组的声明,初始化和赋值分开编写.
    int[] nums;
    nums=new int[4];

    int[] nums=new int[4];
    nums[0]=10;
    ...


    静态初始化

    数组的声明,初始化和赋值一步完成。
    数据类型[] 数组名={值1,值2....};
    int[] nums={1,2,3,4,5};
    注意:不能指定长度,其长度取决于元素的个数。必须在编写在一行语句。
    int[] nums;
    nums={1,2,3,4,5};//错误写法。

    int[]nums=new int[]{1,2,3,4,5};//正确


    高级for循环(for-each)循环

    高级for循环(for-each循环):JDK1.5以后的新特性。
    语法:
    for(元素的数据类型 变量名:数组或集合){
    //循环体
    }
    执行过程:通过数组的下标将元素取出,并赋值给变量: int n = nums[i];
    注意:元素的数据类型必须和数组的数据类型一致。
    使用场景:功能略逊于for循环,在for-each无法直接使用数组的下标。主要用于遍历操作。

    eg:
    int[] nums = {10,20,30,40,50};
    //方法一:通过数组下标进行遍历
    for(int i=0;i<nums.length;i++){
    int n = nums[i];
    System.out.println(n);
    }
    System.out.println("*******************");
    //方法二:使用for-each进行遍历
    for(int n:nums){
    System.out.println(n);
    }


    综合案例

    public static void main(String[] args){
    /*
    根据用户输入的人数,动态创建数组,并获取用户输入的成绩,统计最高分,最低分和平均分
    */
    double sum=0;//总成绩
    double avg=0;//平均成绩
    double max,min;//最高成绩和最低成绩
    System.out.println("请输入班级人数:");
    Scanner input = new Scanner(System.in);
    int num = input.nextInt();//获取用户输入的人数
    //创建数组用于保存学生成绩:数据类型[] 数组名 = new 数据类型[长度]
    double[] scores = new double[num];//根据人数动态创建数组用于保存学生成绩
    for(int i=0;i<scores.length;i++){
    System.out.println("请输入第"+(i+1)+"个人的成绩:");
    scores[i]=input.nextDouble();//获取学生成绩,并将其保存到数组中
    }
    //假设第一个人的成绩是最高分
    max = scores[0];
    //假设第一个人的成绩是最低分
    min = scores[0];
    //遍历
    for(int i=0;i<scores.length;i++){
    //System.out.println(scores[i]);
    sum+=scores[i];//计算总成绩
    if(scores[i]>max){
    max = scores[i];
    }
    if(scores[i]<min){
    min = scores[i];
    }
    }
    avg = sum/scores.length;//计算平均成绩
    System.out.println("最高分:"+max+",最低分:"+min+",平均分:"+avg);
    }


    数组的常用算法
    删除元素

    数组中添加或删除元素需要大量的移位,效率较低。
    冒泡排序

    原理:将相近的两个数字进行比较,大的向后去,小的向前赶。每比较一轮可以确定一个最大值。
    冒泡排序口诀:
    N个数字来排队,两两比较小靠前。
    外层循环N-1(控制需要比较的轮数)
    内层循环N-1-i(控制每轮需要比较的次数)


    查找元素
    通过元素的遍历进行查找
    二分法查找

    前提:待查找的数组是有序的数组(大小顺序)
    原理:将要查找数字与中间元素进行比较。
    如果比中间元素值大,到右边进行查找
    如果比中间元素值小,到左边进行查找


    java.util.Arrays工具类

    除java.lang包下的类和接口可以直接使用之外,其他包下的类和接口在使用时,需要使用import关键字进行导包
    java.util.Arrays类:提供了一下对数组操作的方法。
    常用方法:
    sort(...):对数组进行排序,默认使用升序
    toString(..);可以将数组转换成字符串。
    binarySearch(....):二分法进行搜索指定元素,并返回元素的下标
    fill(..):将数组中的元素替换成指定的数字
    copyOf(..):将数组指定长度的元素复制到一个新数组并返回
    copyRange():复制数组中指定范围的元素到新数组,并返回。


    命令行参数

    public static void main(String[] args){

    }
    命令行参数作用:可以在执行java命令的过程中为main方法传递参数。
    语法: java 类名 值1,值2...
    注意:值1,值2..应该是字符串类型,命令行参数会将值1,值2...封装到args中传入给main方法,下标从0开始


    可变参数

    可变参数(...):从JDK1.5之后引入的新特性。
    作用:避免因相同类型的参数个数不同而编写大量重载方法。
    可变参数可以代表0或多个指定类型的参数。
    可变参数只能作为方法的形参(在方法的定义时)使用,并且一个方法中最多只能有1个可变参数,位置必须放在参数的最后一个位置。
    处理时可以将可变参数当作数组进行处理。


    二维数组
    定义

    二维数组:一个数组中每一个元素又是一个数组(数组嵌套数组)。


    声明和初始化

    语法:
    数据类型[][] 数组名 = new 数据类型[rows][cols];
    eg:
    int[][]nums=new int[3][2];
    nums[0][0]=1;
    nums[0][1]=2;
    ...
    注意:二维数组声明时需要按照高纬度向低纬度的顺序指定。
    int[][]nums = new int[3][];//合法
    int[][]nums = new int[][3];//不合法

    静态初始化:
    int[][]nums={{1,2},{3,4},{5,6}};
    int[][]nums={{1,2},{3,4},{5,6,7}};
    int[][]nums;
    nums={{1,2},{3,4},{5,6}};//错误

  • 相关阅读:
    java读取ldif文件并创建新的节点
    AngularJS的基本概念和用法
    前端开发环境需要的工具
    解决:使用ajax验证登录信息返回前端页面时,当前整个页面刷新。
    js中switch语句不执行
    使用html5中required属性
    H-ui.admin v3.1学习之路(一):导航栏信息无法在内容区显示
    解决:@Auarowired为null
    scrapy框架整理
    django项目的部署
  • 原文地址:https://www.cnblogs.com/panwenshuai/p/6979163.html
Copyright © 2020-2023  润新知