java快速入门--数组,二维数组

数组

介绍:可以存放多个同一类型的数据,数组也是一种数据类型,是引用类型,即:数组就是一组数据

package com.company.hello;

import java.util.Scanner;

/**
 * 数组快速入门
 *
 * @author L.yn
 * @version 1.0
 * @date 2021/11/21 9:21
 */
public class ArrayTest {
    public static void main(String[] args) {
        //定义一个数组
        /**
         * 1、double[] 表示 是double类型的数组,数组名 hens
         * 2、{3, 5, 1, 3.4, 2, 50}表示数组的值/元素
         */
        double[] hens = {3, 5, 1, 3.4, 2, 50};

        //遍历数组得到数组的所有元素的和
        /**
         * 可以通过hens[下标]来访问数组的元素,下标是从0开始编号的比如第一个元素就是hens[0]
         * 通过循环访问
         */
        for (double hen : hens) {
            System.out.println(hen);
        }
        for (int i = 0; i < hens.length; i++) {
            System.out.println(hens[i]);
        }

        //演示 循环输入五个成绩,保存到double数组,并输出
        //1、创建一个double数组,大小5
        double[] score = new double[5];
        //2、循环输入
        for (int i = 0; i < score.length; i++) {
            System.out.println("请输入元素的值");
            double aDouble = new Scanner(System.in).nextDouble();
            score[i] = aDouble;
        }
        //输出,遍历数组
        for (double v : score) {
            System.out.println(v);
        }
    }
}

数组的使用

  1. 使用方式1-动态初始化
    1. 数组的定义
      数据类型[] 数组名 = new 数据类型[大小]
      int[] arr = new int[5];//创建了一个数组,名字为arr,存放五个int
      说明:这是定义数组的一种方法
      在这里插入图片描述

    2. 数组的引用(使用)

      1. 数组名[下标/索引],比如:你要使用A数组的第三个数 A[2]
  2. 使用方式2-动态初始化
    1. 先声明数组
      语法:数据类型[] 数组名
      int[] arr;
    2. 创建数组
      语法:数组名 = new 数据类型[大小]
      arr = new int[10]
  3. 使用方式3-静态初始化
    1. 初始化数组
      语法:数据类型[] 数组名 = {元素值,元素值…}
      int[] arr = {1,2,3,4,5,…}

数组使用注意事项和细节

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用
  3. 数组创建后,如果没有赋值,有默认值
  4. 使用数组的步骤
    1. 声明数组并开辟空间
    2. 给数组各个元素赋值
    3. 使用数组
  5. 数组的下标是从0开始的
  6. 数组下标必须在指定范围内使用,否则报:下标越界异常
  7. 数组属于引用类型,数组型数据是对象(object)

数组赋值机制

  1. 基本数据类型赋值,这个值就是具体的数据,而且相互不影响
    int n1 = 2; int n2 = n1;
  2. 数组在默认情况下是引用传递,赋的值是地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jD63RT2P-1638096009413)(C:\Users\MSI-NB\AppData\Roaming\Typora\typora-user-images\image-20211121151250641.png)]

排序

排序的介绍

排序是将一群数据,依指定的顺序进行排列的过程

排序的分类

  • 内部排序:
    指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法)

  • 外部排序法:
    数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)

  • 冒泡排序
    通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移到后,就像水底下的气泡一样逐渐向上冒

    package com.company.hello;
    
    /**
     * 冒泡排序
     *
     * @author L.yn
     * @version 1.0
     * @date 2021/11/28 16:02
     */
    public class BubbleSort {
        public static void main(String[] args) {
            /**
             * 将五个无序:24,69,80,57,13使用冒泡排序将其排成一个从小到大的有序数列
             * 思路
             * 第一轮排序:目标把最大数放在最后
             * 第一次比较:[24,69,80,57,13]
             * 第二次比较:[24,69,80,57,13]
             * 第三次比较:[24,69,57,80,13]
             * 第四次比较:[24,69,57,13,80]
             *
             * 第二轮排序:目标把第二大数放在倒数第二位置
             * 第一次比较:[24,69,57,13,80]
             * 第二次比较:[24,57,69,13,80]
             * 第三次比较:[24,57,13,69,80]
             *
             * 第三轮排序:目标把第三大数放在倒数第三位置
             * 第一次比较:[24,57,13,69,80]
             * 第二次比较:[24,13,57,69,80]
             *
             * 第四轮排序:目标把第四大数放在倒数第四位置
             * 第一次比较:[13,24,57,69,80]
             *
             * 总结冒泡排序特点
             * 一:一共有五个元素
             * 二:一共进行了四轮排序,可以看成是外层循环
             * 三:每一轮排序可以确定一个数的位置,比如第一轮排序确定最大数...
             * 四:当进行比较时,如果前面的数小于后面的数,就交换
             * 五:每轮比较在减少 4->3->2->1
             */
            int[] arr = {24, 69, 80, 57, 13};
            int temp = 0;//用于辅助交换的变量
            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]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
                /**
                 * 第1轮
                 * 24	69	57	13	80	
                 * 第2轮
                 * 24	57	13	69	80	
                 * 第3轮
                 * 24	13	57	69	80	
                 * 第4轮
                 * 13	24	57	69	80	
                 */
                System.out.println("\n第" + (i + 1) + "轮");
                for (int ae : arr) {
                    System.out.print(ae + "\t");
                }
            }
    
        }
    }
    
    

查找

介绍

在java中,我们常用的查找有两种

  • 顺序查找

    package com.company.hello;
    
    import java.util.Scanner;
    
    /**
     * 顺序查找
     *
     * @author L.yn
     * @version 1.0
     * @date 2021/11/28 16:41
     */
    public class SeqSearch {
        public static void main(String[] args) {
            /**
             * 有一个数列:白眉鹰王,金毛狮王,紫衫龙王,青翼蝠王猜数游戏:
             * 从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】
             * 要求:如果找到了,就提示找到,并给出下标
             *
             * 思路
             * 一、定义一个字符串数组
             * 二、接收用户输入,遍历数组,逐一比较,如果有,则提示信息,并退出
             */
    
            //定义一个字符串数组
            String[] name = {"白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王"};
            System.out.println("请输入名字");
            String findName = new Scanner(System.in).nextLine();
            boolean deflag = true;
            for (int i = 0; i < name.length; i++) {
                //比较字符串 equals,如果要找到名字就是当前元素
                if (findName.equals(name[i])) {
                    System.out.println("恭喜你找到:" + findName);
                    System.out.println("下标=" + i);
                    deflag = false;
                    break;
                }
            }
            if (deflag){
                //没有找到
                System.out.println("没有找到...");
            }
        }
    }
    
  • 二分法查找

多维数组–二维数组

package com.company.hello;

/**
 * 二维数组快速入门
 *
 * @author L.yn
 * @version 1.0
 * @date 2021/11/28 16:54
 */
public class TwoDimensionalArray {
    public static void main(String[] args) {
        /**
         * 快速入门案例:
         * 请用二维数组输出如下图形
         * 0 0 0 0 0 0
         * 0 0 1 0 0 0
         * 0 2 0 3 0 0
         * 0 0 0 0 0 0
         *
         * 什么是二维数组
         * 一:从定义上看 int[][]
         * 二:可以这样理解,原来的一维数组的每个元素是一维数组,就构成二维数组
         */
        int[][] arr = {
                {0, 0, 0, 0, 0, 0},
                {0, 0, 1, 0, 0, 0},
                {0, 2, 0, 3, 0, 0},
                {0, 0, 0, 0, 0, 0}
        };
        //关于二位数组的关键概念
        //1、获取二位数组的元素个数
        System.out.println("二位数组的元素个数:" + arr.length);
        //2、二维数组的每个元素都是一维数组,所以如果需要得到每个一维数组的值,还需要再次遍历
        //3、如果我们要访问第i+1个一维数组的第j个值 arr[i][j]


        //输出二维图形
        for (int i = 0; i < arr.length; i++) {
            //遍历二维数组的每个元素(数组)
            /**
             * arr[i]表示二维数组的第i+1个元素,比如arr[0]:二维数组的第一个元素
             * arr[i].length 得到对应的每一个一维数组的长度
             *
             * 0	0	0	0	0	0
             * 0	0	1	0	0	0
             * 0	2	0	3	0	0
             * 0	0	0	0	0	0
             */
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");//输出一维数组
            }
            System.out.println();//换行
        }
    }
}

二维数组的使用

  • 使用方式一

    • 语法:类型[][] 数组名 = new 类型[大小][大小]
      比如:int[][] arr = new int[3][5]
          package com.company.hello;
      
      /**
       * @author L.yn
       * @version 1.0
       * @date 2021/11/28 17:15
       */
      public class TwoDimensionalArray01 {
          public static void main(String[] args) {
      
              int[][] arr = new int[2][3];
              for (int i = 0; i < arr.length; i++) {
                  for (int j = 0; j < arr[i].length; j++) {
                      /**
                       * 0  0  0
                       * 0  0  0 
                       */
                      System.out.print(arr[i][j] + "  ");
                  }
                  System.out.println();
              }
          }
      }
      
  • 使用方式二

    • 先声明  类型[][] 数组名;
      在定义(开辟空间) 数组名 = new 类型[大小][大小]
      赋值(有默认值,比如int类型的就是0
  • 使用方式三

    • 看一个需求:动态创建下面的二位数组,并输出

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQzsRale-1638096009414)(C:\Users\MSI-NB\AppData\Roaming\Typora\typora-user-images\image-20211128173347617.png)]

      package com.company.hello;
      
      /**
       * @author L.yn
       * @version 1.0
       * @date 2021/11/28 17:34
       */
      public class TwoDimensionalArray02 {
          public static void main(String[] args) {
              //动态创建二位数组,并输出
              int[][] arr = new int[3][];
              for (int i = 0; i < arr.length; i++) {
                  //给每个一维数组开辟空间
                  //如果没有给一维数组 new,那么arr[i]就是null
                  arr[i] = new int[i + 1];
      
                  //遍历一维数组,并给一维数组赋值
                  for (int j = 0; j < arr[i].length; j++) {
                      arr[i][j] = i + 1;
                  }
      
                  /**
                   * 1
                   * 2	2
                   * 3	3	3
                   */
                  for (int j = 0; j < arr[i].length; j++) {
                      System.out.print(arr[i][j] + "\t");
                  }
                  System.out.println();
              }
          }
      }
      
  • 使用方式4:静态初始化

    • 定义:类型[][] 数组名 = {{1,值2,...},{1,....},...}
      比如:
          int[][] arr = {{1,2,3,4},{1,2,3},{1}};
      解读:
          一、定义了一个二维数组 arr
          二、arr有三个元素(每个元素都是一维数组)
          三、第一个一维数组有四个元素,第二个一维数组有三个元素,第三个一维数组有一个元素
      
  • 二位数组的遍历

    • package com.company.hello;
      
      /**
       * 二维数组的遍历
       *
       * @author L.yn
       * @version 1.0
       * @date 2021/11/28 18:12
       */
      public class TwoDimensionalArray03 {
          public static void main(String[] args) {
              int[][] arr = {{1, 2}, {3, 2, 1}, {-2}};
              /**
               * 遍历该二维数组,并得到和
               *
               * 思路
               * 一、遍历二维数组,并将各个值累计到int sum
               */
              int sum = 0;
              /**
               * 输出二位数组的值....
               * 1	2	
               * 3	2	1	
               * -2	
               * 和:7
               */
              System.out.println("输出二位数组的值....");
              for (int i = 0; i < arr.length; i++) {
                  for (int j = 0; j < arr[i].length; j++) {
                      sum += arr[i][j];
                  }
      
                  for (int j = 0; j < arr[i].length; j++) {
                      System.out.print(arr[i][j] + "\t");
                  }
                  System.out.println();
              }
              System.out.println("和:" + sum);
          }
      }
      
      
  • 二位数组使用细节和注意事项

    • 一维数组的声明方式有:int[] x 或者 int x[]

    • 二维数组的声明方式有

      int[][] x 或者 int[] x[] 或者 int x[][]
      
    • 二维数组实际上是多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不同,比如:map[][] 是一个二维数组
      map[][] = {{1,2},{3,4,5}}由map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,我们也成为列数不等的二维数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北木楠-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值