java05 数组

news2024/9/20 12:35:19

一 概念介绍

指的是一种容器,可以同来存储同种数据类型的多个值。

但是数组容器在存储数据的时候,需要结合隐式转换考虑。

比如:

定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的,

但是byte类型,short类型,int类型的数据是可以存到这个数组里面的。

建议:

容器的类,和存储的数据类型保持一致。

举例:

整数1 2 3 4 56 就可以使用int类型的数组来存储。

小数1.1 1.2 1.3 1.4 就可以使用double类型的数组来存储。

字符串"aaa" "bbb" "ccc" 就可以使用String类型的数组来存储。

二 定义

1.格式一:

数据类型 [] 数组名

比如:int [] array

格式二:

数据类型 数组名 []

比如: int array []

数据类型:限定了数组以后能存什么类型的数据。

方括号:表示现在定义的是一个数组。

数组名:就是一个名字而已,方便以后使用。

三 静态初始化

就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程

完整格式:

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

比如:

int[] arr = new int[]{11,22,33};

double[] arr = new double[]{1.1,1.2,1.3};

数据类型:限定了数组以后能存什么类型的数据。

方括号:表示现在定义的是一个数组。

数组名:其实就是名字而已,方便以后使用,在起名字的时候遵循小驼峰命名法。

arr namesArr

new:就是给数组在内存中开辟了一个空间。

数据类型:限定了数组以后能存什么类型的数据。

前面和后面的数据类型一定要保持一致。

int[] arr = new double[]{11,22,33};//错误写法

方括号:表示现在定义的是一个数组。

大括号:表示数组里面的元素。元素也就是存入到数组中的数据。

多个元素之间,一定要用逗号隔开。

注意点:

  • 等号前后的数据类型必须保持一致。

  • 数组一旦创建之后,长度不能发生变化。

简化格式:

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

比如:

int[] array = {1,2,3,4,5};

double[] array = {1.1,1.2,1.3};

  练习

定义数组存储5个学生的年龄。

 

定义数组存储3个学生的姓名。

 

定义数组存储4个学生的身高。

 

四 地址值

打印数组的时候,实际出现的是数组的地址值。

数组的地址值:就表示数组在内存中的位置。

以[I@6d03e736为例:

[ :表示现在打印的是一个数组。

I:表示现在打印的数组是int类型的。

@:仅仅是一个间隔符号而已。

6d03e736:就是数组在内存中真正的地址值。(十六进制的)

但是,我们习惯性会把[I@6d03e736这个整体称之为数组的地址值。

五 元素访问

格式:

数组名[索引];

索引的特点:

  • 索引一定是从0开始的。

  • 连续不间断。

  • 逐个+1增长。

作用:

  • 获取数组中对应索引上的值

  • 修改数组中对应索引上的值

    一旦修改之后,原来的值就会被覆盖了。

示例

package com.wy.arraydemo;

public class ArrayDemo2 {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int number=arr[0];
        System.out.println(number);
        System.out.println(arr[1]);
    }
}

六  数组的遍历

就是把数组里面所有的内容一个一个全部取出来。

数组的长度:数组名.length;

package com.wy.arraydemo;

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

练习

定义一个数组,存储1,2,3,4,5遍历数组得到每一个元素,求数组里面所有的数据和

 

package com.wy.test;

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

定义一个数组,存储1,2,3,4,5,6,7,8,9,10

遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字

 

package com.wy.test;

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

定义一个数组,存储1,2,3,4,5,6,7,8,9,10遍历数组得到每一个元素。

要求:
1,如果是奇数,则将当前数字扩大两倍
2,如果是偶数,则将当前数字变成二分之一

package com.wy.test;

public class Arraytest3 {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7,8,9,10};
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]%2==1){
                arr[i]=2*arr[i];
            }else{
                arr[i]=arr[i]/2;
            }

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

        }
    }
}

 

 

七 动态初始化

格式:

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

package com.wy.arraydemo;

public class ArrayDemo4 {
    public static void main(String[] args) {
        String[] arr=new String[50]; //c创建
        arr[0]="a";  //添加
        arr[1]="b";
        System.out.println(arr[0]);  //获取
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

数组的默认初始化值:

整数类型:0

小数类型:0.0

布尔类型:false

字符类型:'\u0000'

引用类型:null

动态与静态初始化区别

静态初始化:int[] arr = {1,2,3,4,5};

动态初始化:int[] arr = new int[3];

静态初始化:手动指定数组的元素,系统会根据元素的个数,计算出数组的长度。

动态初始化:手动指定数组长度,由系统给出默认初始化值。

八 常见问题

当访问了数组中不存在的索引,就会引发索引越界异常。

避免:

针对于任意一个数组,索引的范围:

最小索引:0

最大索引:数组的长度 - 1 数组名.length - 1

九 练习

1.需求:已知数组元素为{33,5,22,44,55}
请找出数组中最大值并打印在控制台

package com.wy.test;

public class Arraytest4 {
    public static void main(String[] args) {
        int[] arr={33,5,22,44,55};
        int max=arr[0]; //认为0索引最大
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>max){
                max=arr[i];
            }
        }
        System.out.println(max);
    }
}

 

2.需求:生成10个1~100之间的随机数存入数组。

1)求出所有数据的和

2)求所有数据的平均数

3)统计有多少个数据比平均值小

 

package com.wy.test;

import java.util.Random;

public class Arraytest5 {
    public static void main(String[] args) {
        int[] arr=new int[10];
        Random r=new Random(); //把随机数放进数组

        for (int i = 0; i < arr.length; i++) {
            //每循环一次,就会生成一个新的随机数
            int number = r.nextInt(100)+1;
            arr[i]=number;
        }
        //求和
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            sum=sum+arr[i];
        }
        System.out.println("数组和是"+sum);

        //求平均数
        int avg=sum/arr.length;
        System.out.println("平均数是"+avg);

        //比较
        int count=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]<avg){
                count++;
            }
        }
        System.out.println("比平均数小的数有"+count+"个");
        //验证
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

 

3.需求:定义一个数组,存入1,2,3,4,5。按照要求交换索引对应的元素。

交换前:1,2,3,4,5

交换后:5,2,3,4,1

package com.wy.test;

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

 

4.需求:定义一个数组,存入1~5。要求打乱数组中所有数据的顺序。

package com.wy.test;

import java.util.Random;

public class Arraytest7 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        Random r = new Random();

        for (int i = 0; i < arr.length; i++) {
            int randomindex = r.nextInt(arr.length); //生成随即索引
            int temp = arr[i];
            arr[i] = arr[randomindex];  //随机交换
            arr[randomindex] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

 

十 数组内存图

  • 栈  ---》方法运行时使用的内存,比如main方法运行,进入方法栈中执行
  • 堆 ----》存储对象或者数组,new来创建的,都存储在堆内存
  • 方法区 ---》存储可以运行的class文件
  • 本地方法栈 ---》JVM在使用操作系统功能的时候使用
  • 寄存器 ---》给cpu使用和我们开发无关 

 

 

 

两个数组指向同一空间

 

 

 

当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux文本三剑客-sed

一、sed介绍&#xff1a; sed&#xff08;Stream Editor&#xff09;是一种流编辑器&#xff0c;用于对文本进行处理和转换。它可以从输入流中读取文本&#xff0c;并根据指定的规则进行编辑和替换。sed通常用于在命令行中进行文本处理&#xff0c;可以实现搜索、替换、删除、…

Python对日期的一些操作

1. 把这种日期 Mon Jan 29 11:10:49 0800 2024 转换成 ‘2024/2/1 10:50:38’ 这里定义一个func 传入英文日期&#xff0c;返回标准日期格式 def time_formater(input_time_str): input_format %a %b %d %H:%M:%S %z %Y output_format %Y-%m-%d %H:%M:%S return dat…

springboot154基于Spring Boot智能无人仓库管理

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【Win10下实现开机Jar启动的CICD自动化流程】

目录 在Win10下实现开机Jar启动的CICD自动化流程,可以按照以下步骤进行操作:在Win10下实现开机Jar启动的CICD自动化流程,可以按照以下步骤进行操作: 安装Java环境:确保你的计算机上已经安装Java环境,可以通过命令行运行java -version来验证Java环境是否已安装。 编写启动…

操作符重点

简介 移位操作符 <<:左移操作符 移动的是二进制的数&#xff0c;即存储在计算机内部的数的补码 移动之后再右边补零 >>:右移操作符 同左移操作符 移动之后补的数分两种情况: (1).逻辑右移:移动后左边补1 (2).算术右移:移动后左边补原符号位 位操作符: (1).&a…

嵌入式基础知识-逻辑覆盖测试用例设计

1 基础示例 1.1 例题一 有如下程序&#xff0c;设计分别满足语句覆盖和分支覆盖的最有效力的测试用例。 int x 0; int y 0;if (x > 0 && y > 0) {y y/x; }if (x > 1 || y > 1) {y y 1; }x x y;分析&#xff1a; 语句覆盖只需要所有的语句都被执…

【JavaEE spring】SpringBoot 统一功能处理

SpringBoot 统一功能处理 1. 拦截器1.1 拦截器快速⼊⻔1.2 拦截器详解1.2.1 拦截路径1.2.2 拦截器执⾏流程 1.3 登录校验1.3.1 定义拦截器1.3.2 注册配置拦截器 2. 统⼀数据返回格式2.1 快速⼊⻔2.2 存在问题2.3 案例代码修改2.4 优点 3. 统⼀异常处理 1. 拦截器 后端程序根据…

浅谈——开源软件的影响力

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

立式台灯什么牌子好?立式护眼台灯品牌推荐

经常关灯看小说、凌晨加班的朋友都知道&#xff0c;眼睛很容易出现红血丝酸痛的症状&#xff0c;也有一些学生朋友夜间学习导致眼睛视力模糊。 这一系列的情况归根到底都来源于光线&#xff0c;不良的光线会不断给眼睛造成压力&#xff0c;久而久之出现用眼疲劳引起近视的风险…

C#入门详解_01_课程简介、C#语言简介、开发环境和学习资料的准备

文章目录 1. 课程简介2. C#语言简介3.开发环境与学习资料 1. 课程简介 开设本课程的目的 传播C#开发的知识&#xff0c;让更多的人有机会接触到软件开发行业引导有兴趣或者想转行的朋友进入软件开发行业 课程内容 完整讲述C#语言在实际软件开发中的应用采用知识讲述加实例程序…

Easy Excel导出一个表格多个Sheet

步骤&#xff1a; 1.查找官方API文档理解实现 2.实现融入到代码里面 一&#xff1a;Easy Excel重复多次写入(写到单个或者多个Sheet) 重复多次写入(写到单个或者多个Sheet) 理解重点&#xff1a; // 每次都要创建writeSheet 这里注意必须指定sheetNo 第几个sheetNo 而且sh…

WPF图表库LiveChart异常问题处理-System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围

问题&#xff1a; 在使用liveChart处理一个以时间为X轴的曲线时&#xff0c;遇到一个报错&#xff1a;指定的参数超出了有效值的范围System.ArgumentOutOfRangeException:“Specified argument was out of the range of valid values. Arg_ParamName_Name” 指定的参数超出了有…

PAT-Apat甲级题1007(python和c++实现)

PTA | 1007 Maximum Subsequence Sum 1007 Maximum Subsequence Sum 作者 CHEN, Yue 单位 浙江大学 Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Su…

Empowering Multimodal LLMs with Foresight Minds(Merlin)论文精读

paper&#xff1a;https://arxiv.org/pdf/2312.00589.pdfcode&#xff1a;https://ahnsun.github.io/merlin/ 0 Abstract 根据观测预测未知是人类的一个能力&#xff0c;对MLLM进行“future modeling”可以更好地激发其潜能&#xff1b;物体轨迹是一种连续帧间高度结构化的表…

计算机毕业设计 | vue+springboot 教务管理系统(附源码)

1&#xff0c;项目背景 随着我国高等教育的发展&#xff0c;数字化校园将成为一种必然的趋势&#xff0c;国内高校迫切需要提高教育工作的质量与效率&#xff0c;学生成绩管理工作是高校信息管理工作的重要组成部分&#xff0c;与国外高校不同&#xff0c;他们一般具有较大规模…

c#矩阵行列式计算//线程同步

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 实现矩阵行列式计算 {internal class Program{static void Main(string[] args){//定义矩阵Console.WriteLine("矩阵是&#xff1a;&quo…

ICV报告:最新排名!北京下降至第三位

2日&#xff0c;面向前沿科技领域的全球咨询机构ICV发布了《GFII-2023 报告》&#xff0c;其中在“2023年全球产业未来评估:未来20个城市”排名中显示&#xff0c;北京排名居世界第三。进入前十名的其他未来产业城市分别是旧金山-圣何塞、伦敦、慕尼黑、波士顿、纽约、东京横滨…

自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人

如今&#xff0c;大模型层出不穷&#xff0c;这为自然语言处理、计算机视觉、语音识别和其他领域的人工智能任务带来了重大的突破和进展。大模型通常指那些参数量庞大、层数深、拥有巨大的计算能力和数据训练集的模型。 但不能不承认的是&#xff0c;普通人使用大模型还是有一定…

前端工程化之:webpack2-2(内置插件)

目录 一、内置插件 1.DefinePlugin 2.BannerPlugin 3.ProvidePlugin 一、内置插件 所有的 webpack 内置插件都作为 webpack 的静态属性存在的&#xff0c;使用下面的方式即可创建一个插件对象&#xff1a; const webpack require("webpack")new webpack.插件…

【JVM调优及常见的JVM调优参数以及作用】

JVM调优及常见的JVM调优参数以及作用 JVM调优通常涉及以下几个方面&#xff1a;1. 堆内存调优&#xff1a;2. 垃圾回收调优&#xff1a;3. 线程调优&#xff1a;4. 类加载调优&#xff1a;JVM的优化配置可以通过设置JVM的启动参数来实现。以下是一些常用的JVM优化配置参数及其示…