JAVA的数组基本用法

news/2024/9/28 1:20:27

array

在声明数组变量时,需要指出数组类型和数组变量名,例如int[] a;不过这条语句只是声明了变量a,并没有将a初始化为一个真正的数组。应该使用new操作符来创建数组。

int[] a = int[100]或者var a = new int[100]数组长度不要求是常数

但是一旦创建了数组,就不能再改变它的长度。不过当然可以改变单个数组元素。如果程序运行当中需要经常扩展数组的大小,就应该使用另一种数据结构————数据列表ArrayList

可以使用以下两种形式定义一个数组变量:

int[] a;或者int a[];

大多数情况都是用前者是因为它可以将类型int[]与变量名清晰的分开

在Java中提供了一种创建数组对象并同时提供初始值的简写形式

int[] arr = {1,2,3,4,5};这种方式不需要使用new,甚至也不需要指定长度。

还可以使用匿名数组new int[] {1,2,3,4,5},这个表达式会分配一个新数组并填入大括号中提供的值,他会统计初始值个数,并相应的设置数组大小。可以使用这种语法重新初始化一个数组而无需创建新变量,例如:

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

for each

Java有一种功能很强的循环结构,可以用来一次处理数组或者任何其他元素集合中的每个元素,而不必考虑指定索引值。这种增强的for循环形式如下:

for (variable : collection) statement

它将给定变量设置为集合中的每一个元素,然后执行语句。collection必须是一个数组或者是实现了Iterable接口的类对象。例如:

for (int element : a){System.out.println(element);
}
//这个效果就等同于
for (int i=0; i<a.length;i++){System.out.println(a[i]);
}

有一个更容易的方法可以打印数组中的所有值,就是利用Arrays的toString方法返回一个包含数组元素的字符串,这些元素包围在中括号内,并用逗号分隔

    public static void main(String[] args){int[] a = {1,2,3,4,5};System.out.println(Arrays.toString(a));} //[1,2,3,4,5]

数据拷贝

在Java中允许将一个数组变量拷贝到另一个数组变量。这时,两个变量将引用同一个数组

image-20240926110138036

如果这样子进行拷贝的话,那么修改任何一个变量的内容,都会引起所有指向该数组地址的变量发生变化。所起确实希望要搞出来一个新的数组,就要使用Arrays类的copyOf方法:

image-20240926110924888

第二个参数是新数组的长度,如果数组是数值型,那么新增的元素用0不起,如果数组元素是布尔型,则填入false。相反如果新数组长度较短,只拷贝前面的值。

命令行参数

每一个Java程序都有一个带String arg[]参数的main方法。这个参数表明main方法接受一个字符串数组,这个是通过命令行敲进去的。比如下列这个程序

public class Main {public static void main(String[] args) {if (args.length == 0 || args[0].equals("-h")) {System.out.print("hello, ");} else if (args[0].equals("-g")) {System.out.print("Goodbye, ");}for (int i = 1; i < args.length; i++) {System.out.print(" " + args[i]);}}
}

image-20240926112638215

其他的方法

image-20240926113609788

多维数组

二位数组也称矩阵,现在有一个数值表格,用来显示不同利率下投资10000美元有多少收益,利息每年兑现并复投来熟悉以下所有学过的数组的方法

image-20240926114725382image-20240926114822763

程序中用到一个存储利率的一维数组interest和一个存储账户余额的二维数组balances(对应每年和利率分别有一个余额),double[][] balances = new double[NYEARS][NRATES]; 使用初始余额来初始化这个数组的第一行:

for (int j = 0; j < balances[0].length; j++) {balances[0][j] = 10000;
}

然后计算其他行:

for (int i = 1; i < balances.length; i++) {for (int j = 0; j < balances[i].length; j++) {double OldBalance = balances[i - 1][j];double interest = OldBalance * interestRate[j];balances[i][j] = OldBalance + interest;}
}

完整程序如下:

public class Main {public static void main(String[] args) {final double STARTRATE = 10;final int NYEARS = 10;final int NRATES = 6;// 设置利率为10%->15%double[] interestRate = new double[NRATES];for (int j = 0; j < interestRate.length; j++) {interestRate[j] = (STARTRATE + j) / 100.0;}double[][] balances = new double[NYEARS][NRATES];// 设置初始的利润为10000for (int j = 0; j < balances[0].length; j++) {balances[0][j] = 10000;}// 计算利息for (int i = 1; i < balances.length; i++) {for (int j = 0; j < balances[i].length; j++) {double OldBalance = balances[i - 1][j];double interest = OldBalance * interestRate[j];balances[i][j] = OldBalance + interest;}}for (int j = 0; j < interestRate.length; j++) {System.out.printf("%9.0f%%", 100 * interestRate[j]);}System.out.println();for (double[] row : balances) {for (double b : row) {System.out.printf("%10.2f", b);}System.out.println();}}
}

想要快速打印一个二维数组,可以直接调用Arrays的deepToString方法生成

System.out.println(Arrays.deepToString(balances));

image-20240926142014929

C++和java的区别:

  1. Java数组与堆栈上的C++数组有很大的不同。但基本上与在堆上分配的数组指针一样。也就是说:

int[] a = new int[100];//java

不同于

int a[100]; //c++

而等同于

int* a = new int[100];//c++

Java中的[]运算符预定义为会完成越界检查。另外,没有指针运算,就意味着不能通过a+1得到数组中的下一个元素。

  1. 在C++中,Java声明的

double[][] balances = new double[10][6];//java

不同于

double balances[10][6]//C++

也不同于

double (*balances)[6] = new balances[10][6]'//C++

而是分配了一个包含10个指针的数组;

double** balances = new double*[10];

然后这个指针数组的每一个元素会填充一个包含6个数字的数组;

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

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

相关文章

Unity DatePicker用法,实现UI的日期/时间选择器功能

前言 用Unity3d做一个类似于选时间段,查询数据并展示统计UI的功能 插件 https://assetstore.unity.com/packages/tools/gui/datepicker-for-unityui-68264 样例效果 弹出日期选择器时间范围选择器包含类型 Shared Calendar 共享的日历,这个就是几个选择器共用一个日历来选择时…

正三棱台

正三棱台的相关知识点前情概要 正三棱台的概念,表面积,体积公式,引申 动态演示结合上图,你能说出正三棱台的各部分的名称吗?你能自行画出正三棱台的图形吗? 典例剖析 【2025届高三质检一试题】已知正三棱台 \(ABC-A_1B_1C_1\) 的上底面积为 \(\sqrt{3}\),下底面积为 \(4…

【VMware vCenter】升级到 vCenter Server 8.0 U3b 后 vSphere Client 出现卡死和不响应等问题的解决方法。

最近 VMware 发布了 VMSA-2024-0019 安全通告,更新并修复了 CVE-2024-38812 和 CVE-2024-38813 编号中发现的 vCenter Server 漏洞,可能很多人都已经更新了,我也将自己的实验环境更新到了说明中所修复的版本,vCenter Server 8.0 U3b,内部版本号 24262322。但是,更新之后使…

vscode设置python解释器以及函数无法点击跳转问题

1.下载插件 1.1 Python1.2 Pylance1.3 Remote-SSH2.设置本地/远程python解释器 2.1本地设置 2-1-1 设置解释器路径设置自定义python解释器路径,mac快捷键command + p> python: select interpreter选择或者输入解释器2-1-2 查看设置结果设置完python-venv路径后,打开py脚本…

老毛子、H大固件wan口修改为lan口

事由 因路由器只有一个wan口两个lan口。无线桥接(非AP模式)之后wan口也就没有用了,两个lan口也不够我用,索性将wan桥接为lan。另外:解释一下为何说我桥接不说修改,修改对外行对结果来说的状态,内部命令行专业来说其实就是桥接命令 需求和操作结果 wan口修改为lan口、无线…

第一次结对作业

这个作业属于哪个课程 软件工程2024这个作业要求在哪里 2024秋软件工程结对作业(第一次之需求分析和原型设计)这个作业的目标 学习使用原型软件,辅助完成软件工程的前期任务学号 102201427结对成员学号:102201427、102201426 原型链接:Find You Team一、阅读《构建之法》后…

decimal,float和double的区别是什么?

原文链接:https://blog.csdn.net/hellojoy/article/details/118105569 表示小数的一共有三种类型:float是单精度,double是双精度,decimal是数字型,它们所占的内存空间不一样,表示的位数也不一样。 1、精度:float单精度小数部分能精确到小数点后面6位,用 32 位二进制进…

布客沉思录(二)合伙人的不作为和背叛

合伙人需要做但是没有做的规划翻译并校对了 FreeLearning VKDoc iBooker 三个系列技术教程 √ 制作大量源码解析 √ 制作了视频合成工具 √ 制作了大量玄学视频,普及玄学知识 √ 制作了大量量化教程 √ 探索并实现了开放式两性关系 √ 制作大量视频普及开放式关系和红丸 量化策…