首页 > 编程语言 >Java学习笔记——第四天

Java学习笔记——第四天

时间:2024-03-03 13:11:43浏览次数:33  
标签:arr Java 变量 int 元素 笔记 length 数组 第四天

数组

数组是什么

数组就是一个容器,用来存一批同种类型的数据。

数组有什么用

遇到批量数据的存储和操作时,数组比变量更适合。代码简洁,逻辑清晰。

数组的定义

静态初始化数组

定义数组的时候直接给数组赋值。

格式1(完整格式)

数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };

格式2(简化格式)

数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };

使用场景

适合一开始就知道要存入哪些元素值的业务场景。

动态初始化数组

定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度。

格式

数据类型[] 数组名 = new 数据类型[长度];

使用场景

  • 适合开始不确定具体元素值,只知道元素个数的业务场景。
  • 先定义数组,后赋值数据进去。

动态初始化数组元素默认值规则

动态初始化数组元素默认值规则

数组的访问

格式

数组名称[索引]

取值

int data = arr[1];

赋值

arr[1] = 1;

数组长度

数组名称.length
  • 数组的最大索引是“数组名称.length - 1”(前提:元素个数大于0)

数组的遍历

什么是遍历

就是依次访问数组中的每个元素。

为什么要遍历数组

业务开发中需要用到:统计数据,搜索数据...

如何遍历数组

int[] arr = {1, 2, 3, 4, 5};
for (i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

数组的执行原理

Java的内存分配

Java会在计算机内存中运行一个JVM程序,Java的程序都在JVM中运行,Java将JVM虚拟机的内存分为五部分:

  • 方法区:用于存放字节码文件。
  • 栈:用于存放运行的方法和变量。
  • 堆:用于存放用new关键字创建的对象。
  • 本地方法栈
  • 寄存器

Java程序的执行原理

  1. Java程序开始运行后,其class文件会被提取到方法区,然后一行一行地运行class文件。
  2. 将运行过程中的方法和变量存放在栈中,由new关键字创建的对象被存放在堆中。
  3. 依次运行直到程序结束。

数组的执行原理

  1. 当运行到定义数组的代码时,数组变量被存放在栈中,而数组对象被存放在堆中。
  2. 栈中的数组变量的被赋值为堆中的数组变量的地址。

多个数组变量指向同一个数组对象

  • 多个数组变量可以指向同一个数组对象,只要这些数组变量中存储的是同一个数组对象的地址。
  • 多个变量修改的都是同一个数组对象中的数据。
  • 一旦数组对象中的数据被修改,则所有数组变量访问出的值都会被修改。

空指针

  • 如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象。
  • 此时访问其对象会出现异常。

数组的注意事项

  • 什么类型的数组只能存放什么类型的数据。
  • “数据类型[] 数组名”也可写成 “数据类型 数组名[] ”。
  • 数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型。
  • 数组一旦定义出来,其长度和类型就固定了。
  • 不要访问超过数组的最大索引,否则会出现数组访问越界异常。

数组应用案例

数组求最值

需求

找出数组中元素的最大值。

实现步骤

  1. 把数据输入到数组中。
  2. 定义一个变量max用于记录最终的最大值。
  3. 从第二个位置开始遍历数组的数据,如果遍历的当前数据大于max变量存储的数据,则替换变量存储的数据为当前数据。
  4. 循环结束后输出max变量。

代码

public class MaxOfArray {
    public static void main(String[] args) {
        int[] arr = {5, 9, 4, 6, 7}; //定义数组

        int max = arr[0]; //记录数组的最大值,初始化为数组的第一个元素

        //从第二个位置开始遍历数组,并将max与这些元素依次比较,将较大值存入max
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }

        System.out.println(max); //输出数组元素的最大值
    }
}

数组反转

需求

某个数组有5个数据:10,20,30,40,50,请将这个数组中的数据进行反转。

实现步骤

  1. 使用for循环,让数组的首尾位置的元素依次交换。
  2. 定义一个临时变量存储前一个位置处的元素值。
  3. 再把后一个位置处的元素值,赋值给前一个位置处。
  4. 最后把临时变量存储的前一个位置的值赋值给后一个位置处。

代码

public class ArrayReverse {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40, 50}; //定义数组

        //使用for循环,让数组的首尾位置的元素依次交换。
        for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[i]; //定义一个临时变量存储前一个位置处的元素值
            arr[i] = arr[arr.length - 1 - i]; //再把后一个位置处的元素值,赋值给前一个位置处
            arr[arr.length - 1 - i] = temp; //最后把临时变量存储的前一个位置的值赋值给后一个位置处
        }

        //遍历打印数组,查看交换后的数组
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

随机排名

需求

某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。

实现步骤

  1. 定义一个动态初始化的数组用于录入员工的工号。
  2. 遍历数组中的每个元素。
  3. 每遍历到一个数据,都随机一个索引值出来,让当前数据与该索引位置处的数据进行交换。
  4. 输出数组中的内容。

代码

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

public class ArrayShuffle {
    public static void main(String[] args) {
        int[] workId = new int[5]; //定义一个动态初始化的数组

        Scanner sc = new Scanner(System.in); //获取Sacnner对象
        Random r = new Random(); //获取Random对象

        //循环输入5名员工的工号
        for (int i = 0; i < workId.length; i++) {
            System.out.println("请输入第" + (i + 1) + "名员工的工号");
            workId[i] = sc.nextInt();
        }

        //遍历数组中的每个元素并随机打乱
        for (int i = 0; i < workId.length; i++) {
            int index = r.nextInt(5); //随机一个索引值

            //让当前数据与该索引位置处的数据进行交换
            int temp = workId[i];
            workId[i] = workId[index];
            workId[index] = temp;
        }

        //遍历打印数组,查看交换后的数组
        for (int i = 0; i < workId.length; i++) {
            System.out.println(workId[i]);
        }
    }
}

补充:Debug工具的使用

Debug工具是什么

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

Debug工具的基本使用步骤

  1. 在需要控制的代码行左侧,点击一下,形成断点。
  2. 选择使用Debug方式启动程序,启动后程序会在断点处暂停。
  3. 控制代码一行一行的往下执行,同时可以观察所有变量的值。

标签:arr,Java,变量,int,元素,笔记,length,数组,第四天
From: https://www.cnblogs.com/zgg1h/p/18049856

相关文章

  • Java中类与类、类与接口、接口与接口之间是什么关系?
    Java中类与类之间是什么关系?1.依赖依赖是指一个类(称为依赖类)使用到了另一个类(称为被依赖类),而这种使用关系是具有偶然性的、临时性的、非常弱的,但是被依赖类(目标类)的变化会影响到依赖类。例如,比如人A要过河,需要借用一条船B,此时人A与船B之间的关系就是依赖。表现在代码层面,为类B......
  • Java方法
    何为方法Java方法是语句的集合,它们在一起执行一个功能,方法包含于类或对象中,方法在程序中被创建,在其他地方被引用设计方法的原则:保持方法的原子性-一个方法只完成1个功能,这样利于后期的拓展publicclassDemo01{publicstaticvoidmain(String[]args){ints......
  • 「java.util.concurrent并发包」之 Unsafe
    一unsafe介绍Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C......
  • 是学习c++还是java?
    上高中时,自己第一次接触到学校的中华学习机和苹果机,当时中华学习机上可以进行basic编程,那时候自己其实就爱上编程,但是没有人指点,也学习不得法,所以就没有进行下去!大学时,自己的主攻专业并不是计算机,但是学习了《计算机基础》和《c程序设计》,前者主要学习dos命令和wps文字处理,后者主......
  • Go语言精进之路读书笔记第43条——使用testdata管理测试依赖的外部数据文件
    43.1testdata目录Go语言规定:Go工具链将忽略名为testdata的目录。开发者可以在名为testdata的目录下存放和管理测试代码依赖的数据文件,数据文件可作为输入也可作为输出gotest命令在执行时会将被测试程序包源码所在目录设置为其工作目录,可以这样使用f,err:=os.Open("testda......
  • Java方法
    JAVA方法一、什么是方法?System.out.println(),他们是什么?System.out.println();/*System是一个类out是System下的一个输出对象println()就是一个方法*/Java方法是语句的集合,它们在一起执行一个功能,方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在......
  • Semantic Kernel 学习笔记:通过 Kernel Memory 初步体验 Retrieval Augmented Generati
    学习材料:QuickintrotoKernelMemory:install,uploadadoc,askaquestion创建控制台项目dotnetnewconsoledotnetaddpackageMicrosoft.KernelMemory.Core创建IKernelMemory实例varmemory=newKernelMemoryBuilder().WithOpenAIDefaults(OPENAI_API_KEY......
  • Java引用类型解析:掌握强引用、软引用、弱引用和幻象引用的妙用
     概述:Java中的引用分为强引用、软引用、弱引用和幻象引用。强引用是最常见的,不会被垃圾回收;软引用在内存不足时才被回收;弱引用在下一次垃圾回收时回收;幻象引用用于检测对象是否已被回收。它们各自适用于不同场景,帮助开发者更灵活地管理对象生命周期,避免内存泄漏。在Java中,引......
  • JavaWeb_mac_env
    maven安装brew安装wgetbrewinstallwgetbrewcleanup--prune=all //删除所有安装缓存下载mavenwgethttps://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz或者curl-Ohttps://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache......
  • java Flappy Bird小游戏二次开发
    引言FlappyBird是一款广为人知的经典小游戏,以其简单的操作方式和高难度挑战吸引了全球数百万玩家。游戏的核心机制非常直接——玩家通过点击屏幕使小鸟飞翔,避免碰撞到上下移动的管道,同时尽可能地飞行得更远。这种看似简单的游戏设计隐藏了深层的挑战性和上瘾性,让人不禁一试再试......