day06_数组

今日内容

  • 数组入门
    • 理解数组功能
    • 数组声明创建
    • 数组操作(取值,赋值)
    • 遍历
    • 练习题
    • 内存图

复习

一、数组的介绍

数组就是一个容器,用来装多个数据的。

java的数组有特点

  • 数组长度是固定的
  • 数组存储的类型是固定的
  • 可以存储重复元素

基本语法(声明+创建):

  • 数据类型[] 数组名 = new 数据类型[长度];
  • int[] arr = new int[3];
  • 前后的数据类型要一致

二、数组使用

2.1 声明创建[重点]

    public static void main(String[] args) {// 数据类型 变量名 = 值;// 数据类型[] 数组名 = new 数据类型[长度];int[] arr = new int[3];// 创建了长度为3的int型数组,以arr为代表double[] arr2 = new double[4];}

2.2 内存关系

  • java的内存中分为几大区域,暂时先了解两个(栈,堆)
    • 方法执行会进,执行完弹栈消失
    • new出来的对象会进
  • 在java中,凡是new 的都会在堆中创建对象
    • 堆中创建数组对象,会开辟连续空间
    • 给数组分配下标(也叫索引,index),下标从0开始
    • 数组内赋默认值
    • 对象会产生地址值

image-20240226102557937

2.3 数组操作

数组操作就两种用法: 存储数据(存值),取出数据(取值)

2.3.1 取值

        // 声明创建数组// 数组创建时有默认值,int类型默认值是0,double是0.0// 数组有下标从0到长度-1int[] arr1 = new int[3];// 数组取值,通过数组名[下标]int a = arr1[0];int b = arr1[1];int c = arr1[2];System.out.println(a );System.out.println(b );System.out.println(c );

image-20240226111139361

注意: 数组创建完后有默认值

  • int类型是0
  • double类型是0.0
  • char类型是’ ’
  • boolean类型是 false
  • 引用类型默认值是null.因为String是引用类型,所以默认值是null

注意: 数组取值时注意下标越界问题

  • ArrayIndexOutOfBoundsException
  • 因为数组下标是从0至长度-1的

2.3.2 存值

语法: 数组名[下标] = 值;

  // 数组存值// 数组名[下标] = 值;arr1[0] = 1;arr1[1] = 2;arr1[2] = 3;// 存完再次取出查看效果System.out.println(arr1[0] );System.out.println(arr1[1] );System.out.println(arr1[2] );

image-20240226112219336

2.3.3 完整代码

package com.qf;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/26* @desc 数组取值存值*/
public class Demo2 {public static void main(String[] args) {// 声明创建数组// 数组创建时有默认值,int类型默认值是0,double是0.0// 数组有下标从0到长度-1int[] arr1 = new int[3];// 数组取值,通过数组名[下标]int a = arr1[0];int b = arr1[1];int c = arr1[2];// int d = arr1[3];  // 下标3越界!System.out.println(a);System.out.println(b);System.out.println(c);// 数组存值// 数组名[下标] = 值;arr1[0] = 1;arr1[1] = 2;arr1[2] = 3;// 存完再次取出查看效果System.out.println(arr1[0]);System.out.println(arr1[1]);System.out.println(arr1[2]);System.out.println("-----------");// double默认值0.0// 创建长度为3的数组,存储金额double[] arr2 = new double[3];System.out.println(arr2[0]);// 0.0System.out.println(arr2[1]);System.out.println(arr2[2]);// 存储3个金额arr2[0] = 15000.0;arr2[1] = 5000;// int-->doublearr2[2] = 10000;// 取出查看效果System.out.println(arr2[0] );System.out.println(arr2[1] );System.out.println(arr2[2] );System.out.println("-----------");// 创建字符串数组,长度3,输出默认值// String默认值是null// 引用类型类型的默认值都是nullString[] arr3 = new String[3];System.out.println(arr3[0]);// nullSystem.out.println(arr3[1]);System.out.println(arr3[2]);// 存储3个人名arr3[0] = "刘备";arr3[1] = "李青";arr3[2] = "格雷福斯";// 取出查看效果System.out.println(arr3[0]);System.out.println(arr3[1]);System.out.println(arr3[2]);}
}

2.4 数组另一种创建方式[重点]

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

这种创建方式,是指定长度不指定元素.


能不能在创建出数组的同时,数组内直接有指定的数据呢?

  • 可以, 创建数组时不指定长度,但是指定数据
  • 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
  • 一般我使用简化语句:
    • 数据类型[] 数组名 = {元素1,元素2,...};
 public static void main(String[] args) {// 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};// int[] arr = new int[]{11,22,33};int[] arr = {11,22,33};// 简化了格式// 以上方式创建整型数组arr,其中直接存储了元素11,22,33// 数组长度是3// 一样可以取值System.out.println(arr[0] );// 11System.out.println(arr[1] );// 22System.out.println(arr[2] );// 33// 也可以再重新赋值arr[0] = 10;arr[1] = 20;arr[2] = 30;System.out.println(arr[0] );// 10System.out.println(arr[1] );// 20System.out.println(arr[2] );// 30}

练习,换成double和String 各来一遍

package com.qf;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/26* @desc*/
public class Demo3 {public static void main(String[] args) {// 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};// int[] arr = new int[]{11,22,33};int[] arr = {11,22,33};// 简化了格式// 以上方式创建整型数组arr,其中直接存储了元素11,22,33// 数组长度是3// 一样可以取值System.out.println(arr[0] );// 11System.out.println(arr[1] );// 22System.out.println(arr[2] );// 33// 也可以再重新赋值arr[0] = 10;arr[1] = 20;arr[2] = 30;System.out.println(arr[0] );// 10System.out.println(arr[1] );// 20System.out.println(arr[2] );// 30System.out.println("-------------------" );double[] arr2 = {12.3,65.4,78.9};System.out.println(arr2[0] );System.out.println(arr2[1] );System.out.println(arr2[2] );// 存值arr2[0] = 1;arr2[1] = 2;arr2[2] = 3.0;System.out.println(arr2[0] );System.out.println(arr2[1] );System.out.println(arr2[2] );System.out.println("------------------" );String[] arr3 = {"蛮子","亚瑟","赵信"};// 取值System.out.println(arr3[0] );System.out.println(arr3[1] );System.out.println(arr3[2] );// 存值arr3[0] = "刘备";arr3[1] = "张飞";arr3[2] = "关羽";}
}

2.5 数组长度属性

数组中有一个属性,length,可以获得数组的长度(存储的数据个数,容量大小).

语法: 数据类型 变量 = 数组.length;

        // 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};// int[] arr = new int[]{11,22,33};int[] arr = {11,22,33};// 简化了格式// 以上方式创建整型数组arr,其中直接存储了元素11,22,33// 数组长度是3int length = arr.length;System.out.println("数组长度:" + length );

三、数组遍历[重点]

遍历: 将数组中的元素一个一个全部取出.

使用for循环遍历

    public static void main(String[] args) {// 声明创建整型数组int[] arr = {11,22,33,44,55};// 遍历输出// 因为下标从0开始for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}

四、练习题

1设计整型数组,要求计算出数组中数字的和

    // 1设计整型数组,要求计算出数组中数字的和public static void arrSum() {int[] arr = {1,2,3,4,5};int sum = 0;for (int i = 0; i < arr.length; i++) {int n = arr[i];sum += n;}System.out.println("数组的和 sum = " + sum );}

2设计整型数组,要求计算出数组中数字的平均数

 public static void arrAvg() {int[] arr = {1,2,3,4,5,6};int sum = 0;for (int i = 0; i < arr.length; i++) {int n = arr[i];sum += n;}double avg = sum * 1.0 / arr.length;System.out.println("数组的平均数 avg = " + avg );}

3键盘输入5个人名到数组,然后变量输出这个人名
提示: String name = scanner.next(); // 来接收字符串数据

 public static void inoutName() {Scanner scanner = new Scanner(System.in);String[] names = new String[5];// 先创建数组,准备向其中存数据// 循环向数组存储数据for (int i = 0; i < names.length; i++) {System.out.println("请输入第"+(i+1)+"个人名:" );String name = scanner.next( );names[i] = name;}// 变量输出for (int i = 0; i < names.length; i++) {System.out.println(names[i] );}}

ps: 变式练习,将输出结果拼接成[元素,元素,元素,…]的形式输出
提示: 利用字符串拼接完成

4设计整型数组,输出数组中的最大值

五 总结

今天是数组基础,讲的都是重点,必须掌握

  • 数组声明,
  • 两种创建方式
  • 取值存值
  • 遍历

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492792.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.4 内容管理模块 - 课程搜索

5.4 内容管理模块 - 课程搜索 文章目录 5.4 内容管理模块 - 课程搜索一、快速入门1.1 需求分析1.2 业务流程1.3 准备环境1.3.1 搭建 elasticsearch1.3.2 索引 概念 1.4 课程信息索引同步1.4.1 技术方案 一、快速入门 本项目使用elasticsearch作为索引及搜索服务 课程如果发布之…

ubuntu内核卸载重装

目录 问题1.问题复现2.可以正常启动的方式 保存快照卸载有问题的内核重装最新内核参考资料 问题 1.问题复现 ubuntu开机出现如下画面,启动不能正常启动 2.可以正常启动的方式 使用其他内核可以正常工作 保存快照 在解决之前保存快照,防止破坏时恢复 卸载有问题的内核…

undo日志详解

一、undo日志介绍 上一节详细的说了redo日志&#xff0c;redo日志的功能就是把增删改操作都记录着&#xff0c;如果断电导致内存中的脏页丢失&#xff0c;可以根据磁盘中的redo日志文件进行恢复。redo日志被设计出来是为了保证数据库的持久性&#xff0c;undo日志设计出来是为…

win10编译openjdk源码

上篇文章作者在ubuntu系统上实践完成openjdk源码的编译&#xff0c;但是平常使用更多的是window系统&#xff0c;ubuntu上编译出来JDK无法再windows上使用。所以作者又花费了很长时间在windows系统上完成openjdk源码的编译&#xff0c;陆续花费一个月的时间终于完成了编译。 本…

力扣--哈希表/滑动窗口/双指针3.无重复字符的最长子串

思路分析&#xff1a; 使用双指针 i 和 j 表示子串的起始位置和结束位置。遍历字符串 s&#xff0c;对于每个字符&#xff1a; 如果字符不在 hash 中&#xff0c;将其加入 hash&#xff0c;同时更新最长子串的长度 result。如果字符已经在 hash 中&#xff0c;说明有重复字符出…

医院LIS(全称Laboratory Information Management System)系统源码

目录 一、医院LIS系统概况 二、医院LIS系统建设必要性 三、为什么要使用LIS系统 四、技术框架 &#xff08;1&#xff09;总体框架 &#xff08;2&#xff09;技术细节 &#xff08;3&#xff09;LIS主要功能模块 五、LIS系统优势 &#xff08;1&#xff09;客户/用户…

【前沿热点视觉算法】-视觉识别的统一卷积和自我注意

计算机视觉算法分享。问题或建议&#xff0c;请文章私信或者文章末尾扫码加微信留言。 1 论文题目 视觉识别的统一卷积和自我注意 2 论文摘要 由于大量的局部冗余和复杂的全局依赖性&#xff0c;从图像和视频中学习区别表示是一项具有挑战性的任务。卷积神经网络&#xff08…

如何使用视频号下载提取器提取视频,推荐2种方法使用!

视频号下载提取视频号视频&#xff0c;推荐大家2个方法&#xff01; 前者简单&#xff0c;后者较为复杂&#xff0c;不过都可以提取视频号视频&#xff0c;大家可根据实际情况来使用。 01 视频号下载工具提取器&#xff1f; 1&#xff1a;通过搜一搜的这款搜索引擎找到自己…

Python总结

python注释 单行注释用 # 多行注释用 或者"""" """" 2.在Python中&#xff0c;双引号&#xff08;""&#xff09;和单引号&#xff08;&#xff09;都可以用来表示字符串。它们的使用方式基本相同&#xff0c;但…

Linux内核网络

文章目录 前言网络协议栈图解功能 发送Linux内核网络数据包图解流程 接收Linux内核网络数据包图解流程 最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;因为Linux内核涉及的内容极多&#xff0c;我们初学者如果一上来就开始深挖细节&#xff0c;很有可能会在Linux内核代码…

代码随想录01 移除元素

移除元素 1.暴力解法2.双指针法 1.暴力解法 暴力解法就是嵌套两次for循环,第一层for循环来寻找数组中的值等于val的, 第二层for循环是往前覆盖,将值等于val的删除. 2.双指针法 双指针法,分为快指针和慢指针 快指针的意义是新的数组中含有的值 慢指针的意义是新的数组中值所在的…