【day05】定义、操作与二维数组

前言

在深入数组的学习之前,让我们回顾一下之前学过的关键概念:

  1. Scanner类:用于从键盘接收输入。

    • 导入:import java.util.Scanner
    • 创建对象:Scanner 名字 = new Scanner(System.in)
    • 方法:
      • nextInt():读取整数
      • next():读取字符串,空格和回车结束
      • nextLine():读取字符串,回车结束
  2. switch语句:多分支选择结构。

    • 格式:
      switch(变量){
          case 常量值1:
              执行语句1;
              break;
          case 常量值2:
              执行语句2;
              break;
          ...
              default:
              执行语句n;
              break;
      }
      
    • 执行流程:变量值匹配case后的常量值,匹配成功执行对应语句,否则执行default
  3. if…else语句:条件判断结构。

    • 格式:
      if(boolean表达式){
          执行语句1
      }else{
          执行语句2
      }
      
  4. else…if语句:多条件判断结构。

    • 格式:
      if(boolean表达式){
          执行语句1
      }else if(boolean表达式){
          执行语句2
      }...else{
          执行语句n
      }
      
  5. for循环:已知循环次数的循环结构。

    • 格式:
      for(初始化变量;比较;步进表达式){
          循环语句
      }
      
  6. while循环:先判断后执行的循环结构。

    • 格式:
      初始化变量;
      while(比较){
          循环语句
          步进表达式
      }
      
  7. do…while循环:至少执行一次的循环结构。

    • 格式:
      初始化变量;
      do{
          循环语句
          步进表达式
      }while(比较);
      
  8. 死循环:无限循环,条件永远为true

  9. 嵌套循环:循环中包含另一个循环。

  10. 循环控制关键字

    • break:结束循环。
    • continue:结束本次循环,进入下一次循环。
  11. Random类:生成随机数的类。

    • 导入:import java.util.Random
    • 创建对象:Random 对象名 = new Random()
    • 方法:
      • nextInt():生成一个随机整数。
      • nextInt(int bound):生成一个0到bound-1之间的随机整数。

模块五重点

本模块我们将重点学习数组的相关知识:

  1. 数组的定义和特点。
  2. 数组的操作(存储数据、获取数据、遍历数据)。
  3. 二维数组的定义、操作和遍历。

第一章:数组的定义

数组是一种容器,可以存储多个数据,属于引用数据类型。

定义数组

动态初始化
数据类型[] 数组名 = new 数据类型[长度];
数据类型 数组名[] = new 数据类型[长度];
静态初始化
数据类型[] 数组名 = new 数据类型[]{元素1,元素2...};
数据类型 数组名[] = new 数据类型[]{元素1,元素2...};
简化静态初始化
数据类型[] 数组名 = {元素1,元素2...};

示例代码

public class Demo01Array {
    public static void main(String[] args) {
        // 动态初始化
        int[] arr1 = new int[3];
        String[] arr2 = new String[3];

        // 静态初始化
        int[] arr3 = new int[]{1,2,3,4,5};

        // 简化静态初始化
        int[] arr4 = {1,2,3,4,5};
        String[] arr5 = {"乾隆","和珅","纪晓岚"};
    }
}

第二章:数组操作

获取数组的长度

数组名.length

示例代码

public class Demo01Array {
    public static void main(String[] args) {
        String[] arr1 = {"迪迦奥特曼","猫和老鼠","花园宝宝","海绵宝宝","圣斗士","百变小樱魔术卡","熊出没"};
        int len = arr1.length;
        System.out.println("len = " + len);
    }
}

索引

索引是元素在数组中的位置,从0开始,最大索引是数组长度-1。

存储元素

数组名[索引值] =;

示例代码

public class Demo02Array {
    public static void main(String[] args) {
        int[] arr = new int[3];
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        System.out.println("============================");
        
        String[] arr1 = new String[3];
        arr1[0] = "东方不败";
        arr1[1] = "岳不群";
        arr1[2] = "林平之";
    }
}

获取元素

数组的默认值:

  • 整数:0
  • 小数:0.0
  • 字符:‘\u0000’
  • 布尔:false
  • 引用:null

示例代码

public class Demo05Array {
    public static void main(String[] args) {
        int[] arr = new int[3];
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        System.out.println(arr); // 地址值
        System.out.println(arr[0]); // 输出0索引上的元素
        System.out.println(arr[1]); // 输出1索引上的元素
        System.out.println(arr[2]); // 输出2索引上的元素
    }
}

在这里插入图片描述

遍历数组

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

示例代码

public class Demo07Array {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

第三章:操作数组时两个常见的问题

数组索引越界异常 ArrayIndexOutOfBoundsException

public class Demo09Array {
    public static void main(String[] args) {
        int[] arr = new int[3];
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        //arr[3] = 400;//索引3超出了arr的索引范围

        //arr[-1] = 1000;//索引3超出了arr的索引范围

        for (int i = 0; i <= arr.length; i++) {
            System.out.println(arr[i]);//索引3超出了arr的索引范围
        }
    }
}

当操作的索引超出数组索引范围时抛出。

空指针异常 NullPointerException

public class Demo09Array {
    public static void main(String[] args) {
        int[] arr = new int[3];
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        //arr[3] = 400;//索引3超出了arr的索引范围

        //arr[-1] = 1000;//索引3超出了arr的索引范围

        for (int i = 0; i <= arr.length; i++) {
            System.out.println(arr[i]);//索引3超出了arr的索引范围
        }
    }
}

当一个对象为null时,再调用此对象中的其他成员时抛出。
在这里插入图片描述

第四章:数组练习

练习1:求数组中的最大值

在这里插入图片描述

public class Demo01GetMax {
    public static void main(String[] args) {
        int[] arr = {5,3,5,7,4,6,8,9};
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        System.out.println("max = " + max);
    }
}

练习2:统计特定条件的个数

随机产生10个[0,100]之间的整数,统计既是3的倍数又是5的倍数但不是7的倍数的个数。

public class Demo02Count {
    public static void main(String[] args) {
        Random rd = new Random();
        int[] arr = new int[10];
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            arr[i] = rd.nextInt(101);
        }
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 3 == 0 && arr[i] % 5 == 0 && arr[i] % 7 != 0) {
                count++;
            }
        }
        System.out.println("count = " + count);
    }
}

练习3:键盘录入姓名并遍历显示

public class Demo03Print {
    public static void main(String[] args) {
        String[] arr = new String[3];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请您输入第"+(i+1)+"个学员姓名:");
            arr[i] = sc.next();


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

练习4:输出数组元素

定义一个数组int[] arr = {1,2,3,4},遍历数组,输出元素按照[1,2,3,4]格式。

public class Demo04PrintRegex {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                System.out.print(arr[i] + "]");
            } else {
                System.out.print(arr[i] + ",");
            }
        }
    }
}

练习5:统计偶数个数

随机50个1-100之间的整数,统计偶数个数。

public class Demo05Count {
    public static void main(String[] args) {
        int[] arr = new int[50];
        Random rd = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = rd.nextInt(100) + 1;
        }
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 2 == 0) {
                count++;
            }
        }
        System.out.println("count = " + count);
    }
}

练习6:查找整数的索引位置

键盘录入一个整数,找出整数在数组中存储的索引位置。

public class Demo06Search {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr = {11,22,33,44,55,66,22};
        int data = sc.nextInt();
        int flag = 0;
        for (int i = 0; i < arr.length; i++) {
            if (data == arr[i]) {
                System.out.println(i);
                flag++;
            }
        }
        if (flag == 0) {
            System.out.println(-1);
        }
    }
}

练习7:数组复制

将一个数组的内容复制到另一个数组中。
在这里插入图片描述

public class Demo07ArrayCopy {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        int[] newArr = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i]);
        }
    }
}

练习8:数组扩容

将一个数组的长度从5扩容到10。

public class Demo08ArrayExpand {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5};
        int[] newArr = new int[10];
        for (int i = 0; i < arr1.length; i++) {
            newArr[i] = arr1[i];
        }
        arr1 = newArr;
        System.out.println(arr1.length);
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
    }
}

练习9:数组合并

合并两个数组。
在这里插入图片描述

public class Demo09ArrayMerge {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3};
        int[] arr2 = {4, 5, 6};
        int[] newArr = new int[arr1.length + arr2.length];
        for (int i = 0; i < arr1.length; i++) {
            newArr[i] = arr1[i];
        }
        int len = arr1.length;
        for (int i = 0; i < arr2.length; i++) {
            newArr[len + i] = arr2[i];
        }
        for (int i = 0; i < newArr.length; i++) {
            System.out.print(newArr[i] + "  ");
        }
    }
}

第五章:内存图

在这里插入图片描述

在Java中,内存被分为五大块,其中栈、堆和方法区是重点。

  1. 栈(Stack):方法运行的地方,方法运行完毕后需要弹栈。
  2. 堆(Heap):每次使用new关键字都会在堆内存中开辟空间。
  3. 方法区(Method Area):记录类的信息和方法的信息。
  4. 本地方法栈(Native Method Stack):运行本地方法。
  5. 寄存器(Registers):与CPU相关。

第六章:二维数组

定义格式

在这里插入图片描述

动态初始化
数据类型[][] 数组名 = new 数据类型[m][n];
静态初始化
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
简化静态初始化
数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

示例代码

public class Demo01Array {
    public static void main(String[] args) {
        int[][] arr1 = new int[2][2];
        int[][] arr2 = new int[2][];
        System.out.println("======================");
        String[][] arr3 = {{"孙悟空","唐僧"},{"刘备","关羽","张飞"},{"宋江"},{"林黛玉","贾宝玉","王熙凤","薛宝钗"}};
    }
}

获取二维数组长度

数组名.length

示例代码

public class Demo02Array {
    public static void main(String[] args) {
        String[][] arr = {{"张三","李四"},{"王五","赵六","田七"},{"猪八","牛九"}};
        System.out.println(arr.length);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i].length);
        }
    }
}

获取二维数组中的元素

数组名[i][j]

示例代码

public class Demo03Array {
    public static void main(String[] args) {
        String[][] arr = {{"张三","李四"},{"王五","赵六","田七"},{"猪八","牛九"}};
        System.out.println(arr[0][0]);
        System.out.println(arr[2][0]);
        System.out.println(arr[1][1]);
    }
}

在这里插入图片描述

二维数组中存储元素

数组名[i][j] =

示例代码

public class Demo04Array {
    public static void main(String[] args) {
        String[][] arr = new String[2][2];
        arr[0][0] = "张飞";
        arr[0][1] = "李逵";
        arr[1][0] = "刘备";
        arr[1][1] = "宋江";
        System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        System.out.println(arr[1][0]);
        System.out.println(arr[1][1]);
    }
}

二维数组的遍历

for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
        System.out.println(arr[i][j]);
    }
}

示例代码

public class Demo05Array {
    public static void main(String[] args) {
        String[][] arr = new String[2][2];
        arr[0][0] = "张飞";
        arr[0][1] = "李逵";
        arr[1][0] = "刘备";
        arr[1][1] = "宋江";
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println(arr[i][j]);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员波特

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

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

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

打赏作者

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

抵扣说明:

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

余额充值