Java语言程序设计——篇五(1)

数组

  • 概述
    • 数组定义
    • 实例展示
    • 实战演练
  • 二维数组定义
  • 数组元素的使用
  • 数组初始化器
    • 实战演练:矩阵计算
  • 💫不规则二维数组
    • 实战演练:杨辉三角形

概述

⚡️数组是相同数据类型的元素集合。各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起
⚡️Java中,数组元素可以为基本数据类型,也可以为引用数据类型(对象)。
⚡️数组可分为一维数组和多维数组。

数组定义

使用数组一般需要三个步骤:
1)声明数组:声明数组名称和元素的数据类型。
2)创建数组:为数组元素分配存储空间。
3)使用数组:对数组元素操作。
1、声明数组(一维数组)
使用数组之前需要声明数组,声明数组就是告诉编译器数组类型和数组名:
在这里插入图片描述
【注】声明数组仅仅是声名一个数组对象的引用,声明数组时不为数组元素分配内存,因此, [ ]中不需给出元素的个数

: double  []marks;String  []words;

2、创建数组
创建数组是为数组的每个元素分配存储空间,使用new语句,格式如下:
数组名 = new 数据类型 [个数]; //动态分配内存给数组

: marks = new double[5];words = new String[3];

数组声明和创建可以写在一个语句中:
数据类型 [ ]数组名 = new 数据类型 [个数];

: double  []marks= new double[5];String  []words = new String[3]; 

当数组被成功创建后,数组中元素会被自动赋予一个默认值, 根据元素类型的不同,默认初始化的值也是不一样的。
在这里插入图片描述

double []marks;
marks = new double[5];marks[0] = 79;marks[1] = 84.5;marks[2] = 63;marks[3] = 90;marks[4] = 98;

在这里插入图片描述
3、访问数组元素
定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。
数组元素的使用方式是:
   arrayName [index]
   数组名     下标⚠️(下标从0到arrayName.length-1)
数组作为对象提供了一个length成员变量,它表示数组元素个数,访问该成员变量的方法为:
        arrayName.length

实例展示

package shujia_test1;public class Csdn5_1 {public static void main(String[] args) {double[] marks = new double[5];marks[0] = 79;marks[1] = 84.5;marks[2] = 63;marks[3] = 90;marks[4] = 98;System.out.println(marks[2]);System.out.println(marks.length);// 输出每个元素值for (int i = 0; i < marks.length; i++) {System.out.print(marks[i] + "  ");}}}

运行结果:
在这里插入图片描述
注:Java运行时系统要对数组元素的范围进行越界检查
4、数组初始化器
在声明数组的同时利用初始化器对数组元素初始化,它是在一对大括号中给出数组的每个元素值。

double[] marks = new double[]{79, 84.5, 63,90, 98};
String[] words = new String[]{"Java", " is", "cool" };

简单形式:数据类型 []数组名={初值0,初值1,…,初值n};

    double[] marks = {79, 84.5, 63, 90, 98};String[] words = {"Java", "is", "cool"};

重点注意: 这种方法创建数组不能指定大小,系统根据元素个数确定大小
int [5]arr = {2,4,6,8,4};在这里插入图片描述

//非法,系统自动统计数据个数,不可指定长度。
🚩在Java中,创建数组时通常需要指定数组的大小(即数组中元素的数量)。这是因为Java中的数组是静态的,一旦创建,其大小就不能改变。这意味着你必须在声明数组时就指定其能够存储的元素数量。

实战演练

编写程序,要求用户从键盘输入5个整数,并存放到一个数组中,然后计算所有元素的和、最大值、最小值、平均值。

package shujia_test1;import java.util.Scanner;public class Csdn5_2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 创建一个数组来存储输入的整数int[] numbers = new int[5];// 提示用户输入5个整数,并将它们存储在数组中System.out.println("请输入5个整数:");for (int i = 0; i < numbers.length; i++) {numbers[i] = scanner.nextInt();}// 初始化和变量来存储总和、最大值、最小值int sum = 0;int max = numbers[0];int min = numbers[0];// 遍历数组,计算总和、最大值、最小值for (int number : numbers) {sum += number;if (number > max) {max = number;}if (number < min) {min = number;}}// 计算平均值double average = (double) sum / numbers.length;// 输出结果System.out.println("总和为:" + sum);System.out.println("最大值为:" + max);System.out.println("最小值为:" + min);System.out.printf("平均值为:%.2f%n", average);// 关闭scannerscanner.close();}}

运行结果:
在这里插入图片描述

二维数组定义

1、二维数组声明

elementType[][] arrayName;
数据类型 [][]  数组名;

或:

elementType arrayName[][];
elementType[] arrayName[];

2、二维数组创建

arrayName = new elementType[row][col];
arrayName = new elementType[row][]; //适用不规则二维数组

例:int [][]matrix = new int[2][3];

二维数组创建后,每个元素被指定为默认值0
在这里插入图片描述

数组元素的使用

访问二维数组元素,形式如下:
arrayName[index1][index2]
数组名 第1维下标 第2维下标
matrix.length得到matrix数组的大小
matrix[0].length得到matrix[0]数组的大小

package shujia_test1;public class Csdn5_3 {public static void main(String[] args) {int array[][] = new int[2][3];System.out.println(array.length);System.out.println(array[0].length);}
}

结果:
在这里插入图片描述

例:
int [][]matrix = new int[2][3];
matrix[0][0] = 80;
matrix[0][1] = 75;
matrix[0][2] = 78;
matrix[1][0] = 67;
matrix[1][1] = 87;
matrix[1][2] = 98;
System.out.println(matrix[1][2]);  
// 98
for ( int i=0; i < matrix.length; i++ ){for ( int j=0; j < matrix[0].length; j++ ){System.out.print(matrix[i][j] +" ");}System.out.println();//换行
}
结果:80  75  78 67  87  98 

访问二维数组时,下标也不能超出范围,否则抛出异常。

数组初始化器

初始化器在声明数组的同时为数组元素初始化
   int[][] matrix = {{15,56,20,-2},
            {10,80,-9,31},
            {76,-3,99,21}};
这种方法创建二维数组不能指定大小,系统根据元素个数确定大小
int[3][4] 在这里插入图片描述
matrix = {{15,56,20,-2}, {10,80,-9,31}, {76,-3,99,21}};
matrix.length值为3,
matrix[1].length值为4

实战演练:矩阵计算

编写程序,计算A+B、A-B和矩阵A的转置(矩阵的行和列互换)。
在这里插入图片描述

package shujia_test1;public class Csdn5_4 {public static void main(String[] args) {// 定义矩阵A和Bint[][] A = { { 1, 3, 5 }, { -3, 6, 0 }, { 13, -5, 7 }, { -2, 19, 25 } };int[][] B = { { 0, -1, -2 }, { 7, -1, 6 }, { -6, 13, 2 }, { 12, -8, -13} };// 计算A+Bint[][] APlusB = addMatrices(A, B);printMatrix("A + B =", APlusB);// 计算A-Bint[][] AMinusB = subtractMatrices(A, B);printMatrix("A - B =", AMinusB);// 计算A的转置int[][] transposeA = transposeMatrix(A);printMatrix("Transpose of A =", transposeA);}// 计算两个矩阵的和public static int[][] addMatrices(int[][] A, int[][] B) {int rowsA = A.length;int colsA = A[0].length;int rowsB = B.length;int colsB = B[0].length;int rows = Math.min(rowsA, rowsB);int cols = Math.min(colsA, colsB);int[][] result = new int[rows][cols];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {result[i][j] = A[i][j] + B[i][j];}}return result;}// 计算两个矩阵的差public static int[][] subtractMatrices(int[][] A, int[][] B) {int rows = Math.min(A.length, B.length);int cols = Math.min(A[0].length, B[0].length);int[][] result = new int[rows][cols];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {result[i][j] = A[i][j] - B[i][j];}}return result;}// 计算矩阵的转置public static int[][] transposeMatrix(int[][] A) {int rows = A.length;int cols = A[0].length;int[][] result = new int[cols][rows];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {result[j][i] = A[i][j];}}return result;}// 打印矩阵public static void printMatrix(String title, int[][] matrix) {System.out.println(title);for (int[] row : matrix) {for (int num : row) {System.out.print(num + " ");}System.out.println();}}
}

运行结果:
在这里插入图片描述

💫不规则二维数组

C语言中定义的数组必须是一个m*n的矩阵,而Java语言的二维数组不一定是规则的矩形。
在这里插入图片描述
对二维数组声明时可以只指定第一维的大小,第二维的每个元素可以指定不同的大小。

: 
String [][]cities = new String[2][]; 
cities[0] = new String[3];
cities[1] = new String[2];
cities[0][0] = new String("北京");
cities[0][1] = new String("上海");
cities[0][2] = new String("广州");  
cities[1][0] = new String("伦敦");
cities[1][1] = new String("纽约");

在这里插入图片描述

实战演练:杨辉三角形

例: 编写程序输出杨辉三角形的前10行。

package shujia_test1;public class Csdn5_5 {public static void main(String[] args) {int i, j;int level = 10;int triangle[][] = new int[level][];for (i = 0; i < triangle.length; i++)triangle[i] = new int[i + 1];// 为triangle数组的每个元素赋值triangle[0][0] = 1;for (i = 1; i < triangle.length; i++) {triangle[i][0] = 1;for (j = 1; j < triangle[i].length - 1; j++)triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];triangle[i][triangle[i].length - 1] = 1;}// 打印输出triangle数组的每个元素for (i = 0; i < triangle.length; i++) {for (j = 0; j < triangle[i].length; j++)System.out.print(triangle[i][j] + " ");System.out.println(); // 换行}}}

运行结果:
在这里插入图片描述
讲解:二维数组可以被看作是一个数组的数组,也就是说,它是一个数组的集合,其中每个元素本身又是一个数组。这些内部数组通常具有相同的长度(尽管在Java中这不是强制性的,但在处理像杨辉三角形这样的结构时,我们通常会保持每行长度递增的模式),但它们各自独立,分别代表二维数组中的一行。从逻辑上讲,你可以将二维数组视为由多个一维数组(行)组成的集合,每个一维数组都包含了一定数量的元素(列)。这种理解方式有助于我们编写代码来遍历和操作二维数组中的元素。在遍历二维数组时,我们通常首先遍历外层数组(即行),然后对于每一行,我们再遍历该行的内部数组(即列)。这就是在上面的杨辉三角形示例中所做的。
博主用心写,读者点关注,互动传真情,知识不迷路

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

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

相关文章

分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测

分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测&#xff0…

[排序]hoare快速排序

今天我们继续来讲排序部分&#xff0c;顾名思义&#xff0c;快速排序是一种特别高效的排序方法&#xff0c;在C语言中qsort函数&#xff0c;底层便是用快排所实现的&#xff0c;快排适用于各个项目中&#xff0c;特别的实用&#xff0c;下面我们就由浅入深的全面刨析快速排序。…

visio保存一部分图/emf图片打开很模糊/emf插入到word或ppt中很模糊

本文主要解决三个问题 visio保存一部分图 需求描述&#xff1a;在一个visio文件中画了很多个图&#xff0c;但我只想把其中一部分保存成某种图片格式&#xff0c;比如jpg emf png之类的&#xff0c;以便做后续的处理。 方法&#xff1a;超级容易。 选中希望保存的这部分图&…

基于上下文的自适应二进制算术编码 CABAC 熵编码介绍

介绍 CABAC&#xff08;Context-Based Adaptive Binary Arithmetic Coding&#xff0c;基于上下文的自适应二进制算术编码&#xff09;是H.265/HEVC视频编码标准中使用的一种高效的熵编码技术。其核心原理是将自适应二进制算术编码与上下文模型相结合&#xff0c;以实现对视频…

630-基于PCIe的高速模拟AD采集卡

一、产品概述 基于PCIe的一款分布式高速数据采集系统&#xff0c;实现多路AD的数据采集&#xff0c;并通过PCIe传输到存储计算服务器&#xff0c;实现信号的分析、存储。 产品固化FPGA逻辑&#xff0c;适配2路1Gsps/2路2Gsps采集&#xff0c;实现PCIe的触发采集&#xf…

vue3前端开发-小兔鲜项目-使用逻辑函数拆分业务模块

vue3前端开发-小兔鲜项目-使用逻辑函数拆分业务模块&#xff01;其实就是把一些单独的业务代码组成一个js文件。抽离出去后&#xff0c;方便后面的维护。 如图&#xff0c;在一级分类下面新建一个文件夹。composables里面新建2个js文件。 分别封装之前的分类&#xff0c;和ban…

[Spring] Spring日志

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

AI在候选人评估中的作用:精准筛选与HR决策的助力

一、引言 随着科技的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已逐渐渗透到各个行业和领域&#xff0c;人力资源管理&#xff08;HRM&#xff09;亦不例外。在候选人评估的环节中&#xff0c;AI技术以其高效、精准的特性&#xff0c;正在逐步改变着传统的招…

深度学习 —— 个人学习笔记6(权重衰减)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 十三、权重衰减 使用以下公式为例做演示&#xff1a; y 0.05 ∑ i 1 d 0.01 x i ε w h e r e ε &#xff5e; N…

从PyTorch官方的一篇教程说开去(4 - Q-table来源及解决问题实例)

偷个懒&#xff0c;代码来自比很久之前看的书&#xff0c;当时还在用gym&#xff0c;我做了微调以升级到gymnasium当前版本&#xff0c;确保可以正常演示。如果小伙伴或者原作者看到了麻烦提一下&#xff0c;我好备注一下出处。 您的进步和反馈是我最大的动力&#xff0c;小伙…

语音识别 语音识别项目相关笔记内容

语音识别 语音识别项目相关笔记内容 语音识别应用范畴语音识别框架语音基本操作使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数使用numpy读取pcm格式音频文件读取wav音频文件,并绘制图像读取双声道的wav音频文件,分别绘制不同声道的波形图读取一个采样率为16k…

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后&#xff0c;第一次启动失败&#xff0c;提示&#xff1a;WSL update failed 解决方案 打开Windows PowerShell 手动执行&#xff1a; wsl --set-default-version 2 wsl --update

使用 vue-element-plus-admin 框架遇到的问题记录

项目打包遇到的问题&#xff1a; 打包语句&#xff1a;pnpm run build:pro 报错信息&#xff1a; Error: [vite]: Rollup failed to resolve import "E:/workplace_gitee/xxx/node_modules/.pnpm/element-plus2.5.5_vue3.4.15/node_modules/element-plus/es/components…

【精品资料】数据安全治理解决方案(27页PPT)

引言&#xff1a;数据安全治理解决方案是一个综合性的体系&#xff0c;旨在通过策略、技术、流程和人力的有机结合&#xff0c;全面提升组织的数据安全防护能力&#xff0c;保障数据资产的安全与合规。 方案介绍&#xff1a;数据安全治理解决方案是组织为确保其数据资产的安全性…

Spark内核的设计原理

导读&#xff1a; 本期是DataFun深入浅出Apache Spark第一期的分享&#xff0c;主讲老师耿嘉安开场介绍了自己的从业经历&#xff0c;当前就职的数新网络与Spark相关的两款产品赛博数智引擎CyberEngine和赛博数据智能平台CyberData。 本次分享题目为《Spark内核的设计原理》&…

智能化一体闸门:助力行业发展

随着科技的飞速发展&#xff0c;智能化技术已经渗透到各个行业和领域&#xff0c;其中水利行业也不例外。智能化一体闸门以其高效、智能、便捷的特点&#xff0c;正助力着行业发展。 一、智能化一体闸门的定义与特点 智能化一体闸门&#xff0c;是集成了先进传感技术、自动控制…

Transformer之Swin-Transformer结构解读

写在最前面之如何只用nn.Linear实现nn.Conv2d的功能 很多人说&#xff0c;Swin-Transformer就是另一种Convolution&#xff0c;但是解释得真就是一坨shit&#xff0c;这里我郑重解释一下&#xff0c;这是为什么&#xff1f; 首先&#xff0c;Convolution是什么&#xff1f; Co…

什么是离线语音识别芯片?与在线语音识别的区别

离线语音识别芯片是一种不需要联网和其他外部设备支持&#xff0c;‌上电即可使用的语音识别系统。‌它的应用场合相对单一&#xff0c;‌主要适用于智能家电、‌语音遥控器、‌智能玩具等&#xff0c;‌以及车载声控和一部分智能家居。‌离线语音识别芯片的特点包括小词汇量、…

Python文件写入读取,文件复制以及一维,二维,多维数据存储

基础解释 在 Python 中&#xff0c;文件操作的模式除了 w &#xff08;只写&#xff09;、 a &#xff08;追加写&#xff09;、 r &#xff08;只读&#xff09;外&#xff0c;还有以下几种常见模式&#xff1a;- r &#xff1a;可读可写。该文件必须已存在&#xff0c;写操…

分类损失函数 (一) torch.nn.CrossEntropyLoss()

1、交叉熵 是一种用于衡量两个概率分布之间的距离或相似性的度量方法。机器学习中&#xff0c;交叉熵常用于损失函数&#xff0c;用于评估模型的预测结果和实际标签的差异。公式&#xff1a; y&#xff1a;真是标签的概率分布&#xff0c;y&#xff1a;模型预测的概率分布 …