Java Array 数组

文章目录

  • Java Array 数组
    • 一,数组的介绍
      • 1. 数组的理解(Array)
      • 2. 数组相关的概念
      • 3. 数组的特点:
      • 4. 变量按照数据类型的分类
      • 5. 数组的分类
      • 6. 一维数组的使用(6个基本点)
      • 7. 数组元素的默认初始化值的情况
    • 二,一维数组
      • 1. 一维数组功能测试
      • 2. 一维数组案例
        • (1). 破解房东电话
        • (2). 输出英文星期几
        • (3). 学生考试等级划分

Java Array 数组

一,数组的介绍

1. 数组的理解(Array)

概念: 是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
简称: 多个和数据的组合。
Java中的容器: 数组、集合框架: 在内存中对多个数据的存储

2. 数组相关的概念

数据名
数据的元素(即内部存储的多个元素)
数据的下标、角标、下角标、索引、index(即找到指定数组元素所使用的编号)
数组的长度(即数组容器中存储的元素的个数)

3. 数组的特点:

数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
创建数组对象会在内存中开辟一整块连续的空间。占据的空间的大小,取决于数组的长度和数组中元素的类型。
数据中的元素在内存中是依次紧密排列的,有序的。
数组,一旦初始化完成,其长度就是确定的,数据的长度一旦确定,就不能修改。
我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
数组名中引用的是这块连续空间的首地址。

4. 变量按照数据类型的分类

基本数据类型: byte \ short \ int \ long \ float \ double \ char \ boolean
引用数据类型: 类、数组、枚举、注解、记录

5. 数组的分类

按照数组的类型: 基本数据类型元素的数组; 引用数据类型元素的数组
按照数组的维数来分: 一维数组; 二维数组; …

6. 一维数组的使用(6个基本点)

数组的声明和初始化
调用数组的指定元素
数组的属性: length,表示数组的长度
数组的遍历
数据元素的默认初始化值
一维数组的内存解析(难点)

7. 数组元素的默认初始化值的情况

注意: 以数组的动态初始化方式为例说明。
整型数组元素的默认初始化值: 0
浮点型数组元素的默认初始化值: 0.0
字符型数组元素的默认初始化值: 0 (或理解为’\u0000’)
boolean型数组元素的默认初始化值: false
引用数据类型数据元素的默认初始化值: null

二,一维数组

1. 一维数组功能测试

包含,一维数组的静态初始化和动态初始化,数组元素调用和数组元素赋值,测试了不同类型数组的数组的元素的初始值,还有如何获取数组的长度,以及遍历数组,数组的内存解析。

package Java_Array_one;

/**
 * ClassName: One_array_test
 * Packge: Java_Array_one
 * Description: 一维数组的测试
 *
 * @Author: aex
 * @Create 2024/5/8 14:24
 * @Version 1.0
 */
public class One_array_test_1 {
    public static void main(String[] args) {
        //1.声明数组和数组初始化
        // 静态初始化: 数组变量的赋值与数组元素的赋值操作同时进行。
        double[] prices = new double[]{20.32,43.21,43.22}; // 初始化数组

        // 动态初始化: 数组变量的赋值与数组元素的赋值操作分开进行
        String[] foods = new String[4]; // 初始化数组

        // 其他正确的方式
        int arr[] = new int[4];
        int[] arr1 = {1,2,3};  //类型推断

        // 错误的方式
        //int[] arr2 = new int[3]{1,2,3};  // 不能动态和静态结合
        //int[3] arr3 = new int[];  // 不能把动态的的长度放到前面去

        //2. 数组元素的调用
        //通过下标的方式,获取数组的元素
        System.out.println(prices[0]); // 取出数组的第一个元素

        foods[0] = "拌海蜇";
        foods[1] = "龙须菜";
        foods[2] = "炝冬笋";
        foods[3] = "玉兰片";

        System.out.println(foods[0]);

        //3. 数组的长度: 用来描述数组容器中容量的大小
        // 用length属性来获取数组的长度
        System.out.println(foods.length);
        System.out.println(prices.length);

        //4. 如何遍历数组
        for (int i=0;i<foods.length;i++){
            System.out.print(foods[i]);
        }

        for (int i = 0; i < prices.length; i++) {
            System.out.println(prices[i]);
        }
        System.out.println("-----");
        //5. 数组元素的默认初始化值
        int[] arr3 = new int[3];
        System.out.println(arr3[0]); // 整型数组元素的默认初始化值为 0
        double[] arr4 = new double[3];
        System.out.println(arr4[2]); // 浮点型数组元素的默认初始化值为 0
        boolean[] arr5 = new boolean[3];
        System.out.println(arr5[0]); // 布尔型数组元素的默认初始化值为 false
        char[] arr6 = new char[3];
        System.out.println(arr6[1]); // 字符型数组元素的默认初始化值为 0
        String[] arr7= new String[3];
        System.out.println(arr7[0]); // 引用型数组元素的默认初始化值为 null

        //6. 数组的内存解析
        int[] a1 = new  int[]{1,2,3};
        int[] a2 = a1;
        a2[1] = 10;
        System.out.println(a1[1]);
        System.out.println(a1);  // a1 和 a2 指向的内存地址是同一个
        System.out.println(a2);  // a1 和 a2 指向的内存地址是同一个

        String a3  = "3b07d329";
        int number  = Integer.parseInt(a3,16); // 将16进制转换为十进制,查看内存地址
        System.out.println(number);
    }
}

2. 一维数组案例

(1). 破解房东电话

实现思路: 这里是有两个数组,一个是存着电话的具体数字,一个数字可能被多次使用,比如122345 这里 2 就使用了两次,然后第二个数字就是存着这些号码的索引,比如第一个是1 也就是上面数组的第二个位置,也就是1,第一位号码就是1,然后我们还要定义一个数组 tel 用来接收电话号码,进入循环,初始化条件 i = 0,因为 索引是从0开始的,i < 索引数组的长度,也就是 11 因为电话号码就是 11 位,我们先把 索引都拿到 也就是 index[i] ,然后把每一位的索引对应的号码都拿到 arr[index[i]] 把每一位号码放到 tel 也就是存号码的数组里,tel[i] = arr[index[i]] 最后for循环遍历这个 tel 数组就可以了。
注意:这个题考察的点是 两个数组间索引和值的对应 tel[i] = arr[index[i]];

/**
         * 案例:"破解" 房东电话
         *
         * 升景坊单间短期出租4个月,550元/月(水电煤公摊,网费35元/月),空调,卫生间,厨房齐全,屋内均是IT行业人员
         * 所以要求求租者最好是同行或者刚毕业的年轻人,爱干净,安静
         * */
        int[] arr = new int[]{9,1,0,3,6,9,8}; // 用来存具体的号码
        int[] index = new int[]{1,0,3,4,2,4,5,5,3,6,4}; //用来存号码的位数对应的具体号码的索引跟上面的数组对应
        int[] tel = new int[11]; // 定义一个变量 int 数组 用来接收电话号码
        for (int i = 0;i < index.length;i++){
//            int value = index[i];
            tel[i] = arr[index[i]];   // 将电话号码存入这个数组中
        }

        for (int j = 0;j < tel.length;j++){ //遍历这个数组,输出电话号码
            System.out.print(tel[j]);
        }

结果输出
在这里插入图片描述

(2). 输出英文星期几

思路:用一个数组存放一周七天的单词,相当于是输入一个数字然后拿到对应的 week 数组里的索引的元素,像是这样,System.out.print(week[0]) 这样拿到的就是 第一个元素也就是 Monday,我们的索引是从 0 开始的,用一个变量 day 来接收输入的数字,if(day >=1 && day <= 7){System.out.print(week[day - 1])} 之所以要这样写是因为,数字肯定是要 大于等于1并且小于等于7,然后 索引是从0开始,如果我们 输入数字1要星期一,那应该是 1-1 索引 0 刚好对应星期一。

/**
 * 案例:输出英文星期几
 * 用一个数组,保存星期一到星期天的7个英文单词,从键盘输入1-7,显示对应的单词
 * {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}
 * */
String[] week = new String[]{"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
Scanner scan = new Scanner(System.in);
System.out.print("请输入数值(1-7):");
for (;;){
    int day = scan.nextInt();
    if(day >= 1 || day <= 7){
        System.out.println(week[day - 1]);
    }else{
        System.out.println("你输入的数据有误!");
        break;
    }
}

结果输出
在这里插入图片描述

(3). 学生考试等级划分

思路:首先第一步是 输入学生的人数,由这个人数来决定数组的长度,第二步就是循环,这里面要输入每一个学生的成绩,定义一个变量 cj 来接收每一个学生的成绩,然后赋值给 用来存放成绩的数组,然后获取 这些学生成绩里面的最大值,Arrays.stream(arr_score).max(); 直接用这个 api,最后一步就是遍历这个成绩数组,并且将最大值与每一位学生的成绩做对比来划分等级。

 /**
         * 案例:学生考试等级划分
         * 从键盘读入学生成绩,找出最高分,并输出学生成绩等级
         *  成绩 >= 最高分 - 10  等级为: 'A'
         *  成绩 >= 最高分 - 20  等级为: 'B'
         *  成绩 >= 最高分 - 30  等级为: 'C'
         *  其余  等级为: 'D'
         *
         *  先读入学生人数,根据人数创建int数组,存放学生成绩
         * */

        //1. 从键盘输入学生的人数,根据人数,创建数组(动态初始化)
        Scanner scan1 = new Scanner(System.in);
        System.out.print("请输入学生人数:");
        int count = scan1.nextInt();
        int[] arr_score = new int[count]; // 根据人数创建动态数组

        //2. 根据提示,依次输入学生成绩,并将成绩保存在数组元素中
        for (int i = 0;i < arr_score.length;i++){
            System.out.print("请输入第"+(i + 1) + "位学生成绩:");
            int cj = scan1.nextInt();
            arr_score[i] = cj;
        }

        //3. 获取学生成绩的最大值
        OptionalInt max_score = Arrays.stream(arr_score).max();
        System.out.println(max_score.getAsInt());

        //4. 遍历数组元素,根据学生成绩与最高分的差值,得到每个学生的等级,并输出成绩和等级
        for (int i = 0;i< arr_score.length;i++){
            if(arr_score[i] >= max_score.getAsInt() - 10){
                System.out.println("学生成绩为:" + arr_score[i] + "等级为: 'A'");
            }else if (arr_score[i] >= max_score.getAsInt() - 20){
                System.out.println("学生成绩为:" + arr_score[i] + "等级为: 'B'");
            } else if (arr_score[i] >= max_score.getAsInt() - 30) {
                System.out.println("学生成绩为:" + arr_score[i] + "等级为: 'C'");
            }else{
                System.out.println("学生成绩为:" + arr_score[i] + "等级为: 'D'");
            }
        }

结果输出
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

香港虚拟主机哪里可以试用?用于企业建站的

香港虚拟主机适合个人、企业建站&#xff0c;包括外贸企业网站、个人博客网站、中小企业官网等&#xff0c;那么作为新手不知道哪家香港虚拟主机好用的时候&#xff0c;该如何找到可以试用的香港虚拟主机呢&#xff1f; 香港虚拟主机也称作香港空间、香港虚拟空间&#xff0c;…

深入探索Android应用数据共享之ContentProvider

本文将深入探讨Android开发中非常重要的数据共享机制 - ContentProvider。 主要内容包括: ContentProvider的基本定义及特点如何实现一个自定义的ContentProviderContentProvider对外提供的功能以及对外部应用的权限控制对ContentProvider的一些常见使用场景使用ContentProvi…

linux_用户与组

用户与组 基于账号的访问控制 账号类型&#xff1a;用户账号(UID) 、组账号(GID) 用户账号简介 作用: 1.可以登陆操作系统 2.不同的用户具备不同的权限 唯一标识&#xff1a;UID&#xff08;编号从0开始的编号&#xff0c;默认最大60000&#xff09; 管理员root的UID&…

简单贪吃蛇的实现

贪吃蛇的实现是再windows控制台上实现的&#xff0c;需要win32 API的知识 Win32 API-CSDN博客https://blog.csdn.net/bkmoo/article/details/138698452?spm1001.2014.3001.5501 游戏说明 ●地图的构建 ●蛇身的移动&#xff08;使用↑ . ↓ . ← . → 分别控制蛇的移动&am…

哈希(构造哈希函数)

哈希 哈希也可以叫散列 画一个哈希表 哈希冲突越多&#xff0c;哈希表效率越低。 闭散列开放定址法: 1.线性探测&#xff0c;依次往后去找下一个空位置。 2.二次探测&#xff0c;按2次方往后找空位置。 #pragma once #include<vector> #include<iostream> #i…

基于SpringBoot+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

机器学习(五) ----------决策树算法

目录 1 核心思想 2 决策树算法主要步骤 3 决策树算法的分类 3.1 ID3算法&#xff08;Iterative Dichotomiser 3&#xff09;&#xff1a; 3.1.1 基本步骤 3.1.2 原理 信息增益 3.1.3 注意事项 3.2 C4.5算法&#xff1a; 3.2.1. 信息增益率 计算公式 3.2.2. 构建决策…

Rpcx (一):详解【介绍、基础示例 demo】

一.rpcx介绍 1.1 rpc是什么 远程过程调用的通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。简单地说就是能使应用像调用本地…

服装店会员管理系统结合小程序商城帮你挖掘出潜在客户

在现代社会&#xff0c;随着科技的不断进步和人们消费习惯的变化&#xff0c;传统的服装店已经不再能够满足消费者的需求。为了更好地服务客户&#xff0c;提升销售业绩&#xff0c;许多服装店开始引入会员管理系统&#xff0c;并结合小程序商城&#xff0c;实现线上线下的无缝…

【半夜学习MySQL】表的约束(含主键、唯一键、外键、zerofill、列描述、默认值、空属性详解)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 前言空属性默认值列描述zerofill主键主键概述主键删除与追加复合主键 自增长唯一键外键综合案例 前言 上一篇文章中介绍了数…

Android性能:高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧

Android性能&#xff1a;高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧 如果在Androidmanifest.xml配置&#xff1a; <application android:hardwareAccelerated"false" > 或者某个特点View使用代码&#xff1a; myView.setLayerType(View.LAYER_TYPE_SOFT…

带你手撕红黑树! c++实现 带源码

目录 一、概念 二、特性 三、接口实现 1、插入 情况一&#xff1a;p为黑&#xff0c;结束 情况二&#xff1a;p为红 1&#xff09;叔叔存在且为红色 2&#xff09;u不存在/u存在且为黑色 &#xff08;1&#xff09;p在左&#xff0c;u在右 &#xff08;2&#xff09;…

爱分析基于杭州云器Lakehouse实现成本最优的一体化管理,新一代数据平台的建设方式

导读 1.当前&#xff0c;企业在大数据和数据中台建设上取得成果&#xff0c;但数据开发管理仍具挑战性&#xff08;成本、效率、复杂度&#xff09;。 2.随数据平台领域成熟&#xff0c;厂商应结合自身需求&#xff0c;重新思考“基于开源自建数据平台”的重资产模式与“购买…

Windows单机部署RocketMQ5.X并与SpringBoot集成

RocketMQ 5.X下载 《RocketMQ 5.X下载》 下载后&#xff0c;解压缩 修改初始内存 修改runserver.cmd&#xff08;Linux则为runserver.sh&#xff09; 将下面的-Xms2g -Xmx2g -Xmn1g调小 if %JAVA_MAJOR_VERSION% lss 17 (set "JAVA_OPT%JAVA_OPT% -server -Xms2g -X…

传感网应用开发教程--AT指令访问新大陆云平台(ESP8266模块+物联网云+TCP)

实现目标 1、熟悉AT指令 2、熟悉新大陆云平台新建项目 3、具体目标&#xff1a;&#xff08;1&#xff09;注册新大陆云平台&#xff1b;&#xff08;2&#xff09;新建一个联网方案为WIFI的项目&#xff1b;&#xff08;3&#xff09;ESP8266模块&#xff0c;通过AT指令访问…

计算机毕业设计python校园二手交易系统aqj3i-

什么叫三层架构呢&#xff1f;指的是表示层、组件层、数据访问层。组件层是双层架构没有的&#xff0c;它的加入&#xff0c;把复杂的问题分解得更简单、明了&#xff0c;通过组件层&#xff0c;实现控制数据访问层&#xff0c;这样达到功能模块易于管理、易于访问等目的&#…

【python量化交易】qteasy使用教程06——创建自定义因子选股交易策略

创建自定义因子选股策略 使用qteasy创建自定义因子选股交易策略开始前的准备工作本节的目标Alpha选股策略的选股思想计算选股指标用FactorSorter定义Alpha选股策略交易策略的回测结果用GeneralStg定义一个Alpha选股策略回测结果&#xff1a;本节回顾 使用qteasy创建自定义因子选…

【UnityRPG游戏制作】Unity_RPG项目_PureMVC框架应用

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…

Redis系列-3 Redis缓存问题

1.缓存的作用 数据库(如Mysql)的持久化特点带来了较低的性能&#xff0c;高并发的场景下&#xff0c;连接池很快被耗尽而出现宕机或DOS&#xff0c;无法继续对外提供服务。相对于数据库的硬盘IO&#xff0c;缓存中间件基于内存进行读写&#xff0c;从而具备较大的吞吐量和高并…

5.10.6 用于乳腺癌超声图像分类的Vision Transformer

医学超声&#xff08;US&#xff09;成像由于其易用性、低成本和安全性已成为乳腺癌成像的主要方式。卷积神经网络&#xff08;CNN&#xff09;有限的局部感受野限制了他们学习全局上下文信息的能力。利用 ViT 对使用不同增强策略的乳房 US 图像进行分类。 卷积神经网络&#…