Java语言程序设计——篇五

news2024/11/14 14:55:07

数组

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

概述

⚡️数组是相同数据类型的元素集合。各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起
⚡️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);

		// 关闭scanner
		scanner.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和B
		int[][] 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+B
		int[][] APlusB = addMatrices(A, B);
		printMatrix("A + B =", APlusB);

		// 计算A-B
		int[][] 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.coloradmin.cn/o/1931251.html

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

相关文章

计算机的错误计算(三十三)

摘要 计算机的错误计算&#xff08;三十二&#xff09;展示了 Python的 math库中 exp(x)的计算精度问题。本节讨论 Python 的 torch 库中的 exp(x)的计算精度问题。结果显示&#xff1a;与 math 库中的函数输出值具有同样的错误数字个数。 不妨仍然取&#xff08;二十八&…

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

使用SpringCloud搭建分布式配置中心

在现代的分布式系统中&#xff0c;配置管理是一个非常重要的组成部分。传统的做法是将配置文件放在每个服务的本地进行配置&#xff0c;这样的做法在规模较小的系统中还能够接受&#xff0c;但是当系统规模逐渐扩大时&#xff0c;配置管理将变得非常困难&#xff0c;容易出错。…

Autosar Dcm配置-0x28服务ComControl-基于ETAS软件

文章目录 前言DcmDcmDsdDcmDspBswMBswMModeRequestPortBswMModeConditionBswMLogicalExpressionBswMActionBswMActionListBswMRule总结前言 0x28服务主要用来控制非诊断报文的通讯,一般在刷写预编程过程中,用来禁止APP的通信报文,可以减少总线负载率,提高刷写成功率。本文…

vue3-tree-org实现带照片的组织架构图

官方文档&#xff1a;vue3-tree-org 显示照片需要注意的地方 使用步骤 下载 npm install vue3-tree-org --save 在main.js中引入 import "vue3-tree-org/lib/vue3-tree-org.css"; import vue3TreeOrg from vue3-tree-org;app.use(vue3TreeOrg) 实现代码 <tem…

【简历】郑州某二本学院:前端秋招简历指导,简历通过率接近于0

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份二本前端同学的校招简历。25届的二本同学求职方向主要是在小公司&#xff0c;但是这个同学他故意把学校放在简历最后&#xff0…

R包:DiagrammeR流程图

介绍 DiagrammeR 依赖于图形描述语言 Graphviz&#xff0c;可以通过 R 包 igraph 和 visNetwork 访问。DiagrammeR 通过将有效的图规范以 DOT 语言的形式传递给 grViz() 函数来输出图。 加载R包 采用DiagrammeRR包&#xff0c;它提供了以下函数&#xff1a; 使用create_grap…

亲子母婴行业媒体邀约宣发资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 亲子母婴行业是一个综合性的产业&#xff0c;涉及多个领域&#xff0c;包括儿童食品&#xff0c;儿童玩具&#xff0c;服装&#xff0c;洗护&#xff0c;月子中心&#xff0c;母婴护理&a…

单臂路由组网实验,单臂路由的定义、适用情况、作用

一、定义 单臂路由是指通过在路由器的一个接口上配置许多子接口,从而实现原来相互隔离的不同VLAN之间的互通。 子接口:把路由器上的实际的物理接口划分为多个逻辑上的接口,这些被划分的逻辑接口就是子接口。 二、适用情况 用在没有三层交换机,却要实现不同VLAN之间的互…

怎样恢复删除的视频?简单几步迅速上手!

在短视频时代&#xff0c;视频成为我们生活中不可缺少的一部分。它记录了我们生活中的点点滴滴&#xff0c;承载着许多美好的回忆。如果一不小心删除了重要的视频&#xff0c;那将是一个巨大的缺憾。那我们该怎么恢复删除的视频呢&#xff1f;在电脑删掉的视频还能恢复吗&#…

Java基础笔记(面试题)

一、Tomcat中为什么要使用自定义类加载器 Tomcat中可以放多个Java项目的jar文件&#xff0c;如果每个jar文件中都有一个User的类&#xff0c;那么User类在没有自定义类加载器的情况下是只能加载一次&#xff1b;想要加载多次&#xff0c;只能自定义类加载器 二、JDK、JRE、JVM…

如何实现本地文件存储

文章目录 1. 知识回顾2. 示例代码 我们在上一章回中介绍了"如何实现文件存储"相关的内容&#xff0c;本章回中将继续介绍与此相关的内容.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们上一章回中介绍了实现文件存储的三个步骤&#xff0c;不过限…

vue调试工具没有Pinia模块解决办法

修改前&#xff0c;调试工具里面没有Pinia模块 在项目的入口文件mian.js中这样修改 import /assets/main.scss import pinia from /stores/index import { createApp } from vue import App from ./App.vue import router from ./router import elFormRenderer from el-form…

详解 BGE-M3 与 Splade 模型

详解 BGE-M3 与 Splade 模型 本文将探索两种先进的 Embedding 模型——BGE-M3 和 Splade&#xff0c;深入解析它们的设计理念和工作原理。 01. 快速回顾Embedding向量的概念 Embedding 向量或者向量表示&#xff0c;是指在高维向量空间中以数值描述表示对象、概念或实体&am…

使用Python和wxPython创建动态HTML日历生成器

在这个数字化时代,日历仍然是我们日常生活中不可或缺的工具。今天,我们将探讨如何使用Python创建一个动态HTML日历生成器。这个项目不仅实用,还能帮助我们深入理解Python编程、GUI开发和网页生成的相关知识。 项目概述 我们的目标是创建一个应用程序,允许用户选择特定的年份和…

第二证券:电影暑期档持续升温 农机自动驾驶驶入快车道

农机自动驾驶打开驶入快车道 得益于农机补贴、土地流通、高标准农田制造等方针引导&#xff0c;叠加技术突围和用户降本增效的内生需求&#xff0c;我国正处于农业2.0向农业3.0的过渡阶段。其间农机自动驾驶系统是结束农业3.0&#xff08;即自动化&#xff09;的要害并迎来快速…

【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程② | 5.4 - 5.8

前言 第 5 章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术的内容&#xff0c;学习要以教材为准。 目录 5.4 软件实现 5.4.1 软件配置管理 5.4.2 软件编码 5.4.3 软件测试 5.5 部署交付 5.5.1 软件部署 5.5.2 软件交付 5.5.3 持续交付 5.5.4…

我日常是如何使用LLM工具的:你的LLM工具没用起来,可能是因为方法不对。

引言 我对 Prompt 认知经历了 2 个阶段&#xff1a; 第一阶段&#xff1a;去年 3 月-11 月&#xff0c;我认为 Prompt 最终会灭亡。 第二阶段&#xff1a;去年 12 月至今&#xff0c;我有两个理解&#xff1a; 在主流 LLM 工具(比如 ChatGPT&#xff0c;文心一言等大模型厂商…

dom4j 操作 xml 之按照顺序插入标签

最近学了一下 dom4j 操作 xml 文件&#xff0c;特此记录一下。 public class Dom4jNullTagFiller {public static void main(String[] args) throws DocumentException {SAXReader reader new SAXReader();//加载 xml 文件Document document reader.read("C:\\Users\\24…

leetcode刷题总结——字符串匹配

KMP&#xff08;字符串匹配算法&#xff09; 主串或目标串&#xff1a;比较长的&#xff0c;我们就是在它里面寻找子串是否存在&#xff1b; 子串或模式串&#xff1a;比较短的。 前缀&#xff1a;字符串A和B&#xff0c;A BS&#xff0c;S非空&#xff0c;则B为A的前缀。 …