首页 > 编程语言 >JAVA的数组基本用法

JAVA的数组基本用法

时间:2024-09-26 14:33:49浏览次数:1  
标签:JAVA int double System balances 数组 new 用法

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];
        // 设置初始的利润为10000
        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;
            }
        }

        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个数字的数组;

标签:JAVA,int,double,System,balances,数组,new,用法
From: https://www.cnblogs.com/ivanlee717/p/18433398

相关文章

  • JavaScript 数据可视化:前端开发的核心工具
    随着互联网和大数据的快速发展,数据呈爆炸式增长,如何有效地展示和理解数据成为了一项关键技能。JavaScript作为前端开发的主要语言,不仅在构建网页方面无可替代,也在数据可视化领域发挥了重要作用。从简单的图表到复杂的交互式展示,JavaScript为开发者提供了丰富的工具和框架,帮助......
  • java 解析excel (网络资源)
    在Java中解析Excel文件,可以使用ApachePOI库。以下是一个简单的例子,展示如何使用ApachePOI读取一个Excel文件(假设为.xlsx格式)的内容。首先,确保你的项目中包含了ApachePOI的依赖。如果你使用Maven,可以添加以下依赖到你的pom.xml文件中:<dependency><groupId>org......
  • 阿里Java面试被out后,奋战3个月,最终拿下美团Offer!
    前言一位小伙伴准备了许久的阿里Java面试,原以为能够顺利拿下offer,但在第三面还是被摁在地上反复摩擦,丧气一段时间后,小伙伴调整了心态重新尝试了一下,最终拿下了美团offer,今天小编把这位小伙伴遇到的面试题分享出来,希望能对即将面试的小伙伴有所帮助。阿里mq消息可靠性,......
  • JavaScript数组方法实战:12个实用技巧让你轻松处理数组
    ......
  • JavaScript对象方法使用指南:成为对象操作达人
    ......
  • 【java笔记】 5 接口使用举例
    //导入Swing库中的消息对话框组件importjavax.swing.*;//定义一个Circle类,该类实现了ShapeInterface接口publicclassCircleimplementsShapeInterface{//定义一个私有变量radius来保存圆的半径privatedoubleradius;//默认构造函数,初始化一个半径为0的圆p......
  • ECMAScript 和 JavaScript 的区别
    ECMAScript和JavaScript有以下区别:一、概念性质不同ECMAScript:是一种标准化的脚本语言规范,它规定了脚本语言的语法、类型、语句、关键字、保留字、操作符和对象等核心内容。它不依赖于任何特定的运行环境,只是一个纯粹的语言规范文档。JavaScript:是一种具体的编程语言,由......
  • Java高效编程(1):使用静态工厂方法替代构造函数
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Java编程中,传统上,类允许客户端获取实例的方式是提供一个公共构造函数。然而,还有一种重要的技术,应该成为每个程序员工具箱中的一部分,那就是使用公共的静态工厂方法。静态工厂方法是一个静态方法,返回类的实例。这......
  • Java高效编程(2):面对多个构造参数时考虑使用构建器模式
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Java编程中,静态工厂和构造函数都存在一个局限性:当可选参数数量较多时,它们的扩展性较差。以表示食品包装上营养成分标签的类为例,这些标签包含几个必需字段——如份量大小、每容器的份数和每份的卡路里——以及超......
  • 2024.9.25 Python,单词替换,优美的排列 II,sort的用法前K个高频单词,广度优先搜索腐烂的橘
    1.单词替换在英语中,我们有一个叫做词根(root)的概念,可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为衍生词(derivative)。例如,词根help,跟随着继承词“ful”,可以形成新的单词“helpful”。现在,给定一个由许多词根组成的词典dictionary和......