第五节 数组

数组

1.数组的概念

数组是相同类型数据的集合。

其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们。

2.数组的创建

数组的创建可分为静态初始化和动态初始化

静态初始化:在程序运行前就能确定数组的大小和数组中的初始数据

语法:
数据类型[] 数组名(变量名/对象名) = {元素1,元素2....};
或
数据类型[] 数组名(变量名/对象名) =  new 数据类型[]{元素1,元素2....}

动态初始化:数组的大小或数组中数据在程序运行时才能决定

语法:
数据类型[] 数组名(变量名/对象名) = new 数据类型[数组长度];
或
数据类型[] 数组名(变量名/对象名);//先声明变量
数组名 = new 数据类型[length];//创建数组并赋值
//注:数组名 = {元素1,元素2....}; 不能这样写

注意:

  1. 数组下标(从0开始)超出数组长度,数组越界异常(运行时异常)
  2. 数组中每个元素都有默认值,默认值是该数据类型默认值
  3. 数组名称.length(属性):取得数组长度

3.关于数组使用上的例子

例题1

/**
 * @标题: 章节5
 * @项目名 例题1
 * @项目描述: 创建一个int型数组并赋值,然后输出它每一个元素。
 * @创建人 yaojiawen
 * @创建时间 2021/4/1418:59
 */
public class LiTi1 {
    public static void main(String[] args) {
        int[] num = new int[3];
        num[0] = 1;
        num[2] = 2;
        for (int i = 0; i < 3; i++) {
            System.out.println(num[i]);
        }
    }
}

例题2

/**
 * @标题: 章节5
 * @项目名 例题2
 * @项目描述: 创建一个数组int[] num={4,1,2},然后在其中找出最大的值并输出。
 * @创建人 yaojiawen
 * @创建时间 2021/4/1419:12
 */
public class LiTi2 {
    public static void main(String[] args) {
        int[] num = {4, 1, 2};
        int max = num[0];
        for (int i = 0; i < num.length; i++) {
            if (num[i] > max) max = num[i];
        }
        System.out.println("最大值为:" + max);
    }
}

4.关于数组操作的常用方法(Arrays)

是在java.util.*包下,需要导包。主要的功能是操作数组(元素)

toString(数组名称) 将数组元素转换成字符串进行操作

equals(数组1,数组2) 比较两个数组是否一相同

sort(数组名称) 对数组进行升序排序

5.常用的几个排序方法

冒泡排序

在这里插入图片描述

原理:将相邻的两个元素进行比较,最大的值放在右端。
过程:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。

import java.util.Arrays;
/**
 * @标题: 章节5
 * @项目名 例题3
 * @项目描述: 对数组int[] num={4,1,6,3};用冒泡排序法进行升序排序。
 * @创建人 yaojiawen
 * @创建时间 2021/4/1419:39
 */
public class LiTi3 {
    public static void main(String[] args) {
        int[] num = {4, 1, 6, 3};
        for (int a = 1; a < num.length; a++) {
            for (int b = 0; b < num.length - a; b++) {
                if (num[b] > num[b + 1]) {
                    int c = num[b];
                    num[b] = num[b + 1];
                    num[b + 1] = c;
                }
            }
        }
        System.out.println(Arrays.toString(num));
    }
}

选择排序

在这里插入图片描述

原理:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

过程:

1.首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。
2.接着从剩下的n-1个数据中选择次小的1个元素,将其和第2个位置的数据交换
3.然后,这样不断重复,直到最后两个数据完成交换。最后,便完成了对原始数组的从小到大的排序。

import java.util.Arrays;
/**
 * @标题: 章节5
 * @项目名 例题4
 * @项目描述: 对数组int[] num={4,1,6,3};用选择排序法进行升序排序。
 * @创建人 yaojiawen
 * @创建时间 2021/4/1419:39
 */
public class LiTi4 {
    public static void main(String[] args) {
        int[] num = {4, 1, 6, 3};
        for (int a = 0; a < num.length; a++) {
            for (int b = a + 1; b < num.length; b++) {
                if (num[a] > num[b]) {
                    int c = num[a];
                    num[a] = num[b];
                    num[b] = c;
                }
            }
        }
        System.out.println(Arrays.toString(num));
    }
}

插入排序

在这里插入图片描述

原理:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。

过程:

1.确定插入排序的数,一般从第二个开始选择

2.从第二个数开始,拿出第二个数进行向前插入排序,一直到拿到最后一个数向前做插入排序

3.每次将选择作为插入的数与前面比较,如果小于则前面的数往后移动一位,否则插入到这个位置

import java.util.Arrays;
/**
 * @标题: 章节5
 * @项目名 例题5
 * @项目描述: 对数组int[] num={4,1,6,3};用选择排序法进行升序排序。
 * @创建人 yaojiawen
 * @创建时间 2021/4/1513:44
 */
public class LiTi5 {
    public static void main(String[] args) {
        int[] num = {4, 1, 6, 3};
        for (int a = 1; a < num.length; a++) {
            int jiaoHuan = num[a];
            int shuLie = a - 1;
            while (shuLie >= 0 && num[shuLie] > jiaoHuan) {
                num[shuLie + 1] = num[shuLie];
                shuLie--;
            }
            num[shuLie + 1] = jiaoHuan;
        }
        System.out.println(Arrays.toString(num));
    }
}

6.二维数组

二维数组的元素是一维数组。

二维数组的创建

1. 数据类型[][] 数组名 = new 数据类型[len1][len2];//初始化数组
   len1: 二维数组的元素个数(有len1个一维数组)
   len2: 限定一维数组的元素个数

2. 数据类型[][] 数组名 = new 数据类型[len1][];
   len1: 二维数组的元素个数(有len1个一维数组)
       
3.数据类型[][] 数组名 = {{1},{1,2},{1,2,3}};
4.数据类型[][] 数组名 = new 数据类型[][]{{1},{1,2},{1,2,3}};

7.练习题

练习1

题目:连接两个数组,使其组成一个新的数组。

import java.util.Arrays;
/**
 * @标题: 章节5
 * @项目名 练习1
 * @项目描述: 连接两个数组,使其组成一个新的数组
 * @创建人 yaojiawen
 * @创建时间 2021/4/519:35
 */
public class LianXi2 {
    public static void main(String[] args) {
        int[] num1 = {1, 2, 3};
        int[] num2 = {4, 5, 6};
        int len = num1.length + num2.length;
        int[] zuHe = new int[len];
        for (int a = 0; a < len; a++) {
            if (a < num1.length) zuHe[a] = num1[a];
            else zuHe[a] = num2[a - num1.length];
        }
        System.out.println(Arrays.toString(zuHe));
    }
}

练习2

题目:把一个数组里面的值拼接成一个字符串。如int[] a={1,2,3};使得String b=[1,2,3];

/**
 * @标题: 练习1
 * @项目名 章节4
 * @项目描述: 把一个数组里面的值拼接成一个字符串。如int[] a={1,2,3};使得String b=[1,2,3];
 * 注:字符串连接可以用方法append()或字符串连接符 "+"
 * @创建人 yaojiawen
 * @创建时间 2021/3/3016:10
 */
public class LianXi1 {

    public static void main(String[] args) {
        int[] num = new int[3];
        num[0] = 20;
        num[1] = 30;
        num[2] = 40;
        String pinJei = "[";
        for (int a = 0; ; a++) {
            pinJei = pinJei + num[a];
            if (a == num.length - 1) {
                pinJei += "]";
                break;
            }
            pinJei += ",";
        }
        System.out.println(Arrays.toString(num));
    }
}

练习3

创建一个数组,这个数组中第一个和数组中最大的数交换位子,最小的和最后的数交换位置,其他元素位置不变。

import java.util.Arrays;
/**
 * @标题: 章节5
 * @项目名 练习3
 * @项目描述: 创建一个数组,这个数组中第一个和数组中最大的数交换位子,最小的和最后的数交换位置,其他元素位置不变。
 * @创建人 yaojiawen
 * @创建时间 2021/4/1516:06
 */
public class LianXi3 {
    public static void main(String[] args) {
        int[] num = {4, 31, 48, 1, 3, 48, 4};
        int a = 0, b = 0;
        for (int i = 1; i < num.length; i++) {
            if (num[a] < num[i]) a = i;  //找出最大值的下标
            if (num[b] > num[i]) b = i;  //找出最小值的下标
        }
        int c = num[0];  //把第一个和最大值交换
        num[0] = num[a];
        num[a] = c;
        c = num[num.length - 1];  //把最后一个和最小值交换
        num[num.length - 1] = num[b];
        num[b] = c;
        System.out.println(Arrays.toString(num));
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风萧寒水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值