首页 > 编程语言 >测试驱动技术(TDD)系列之3:详解Java数组

测试驱动技术(TDD)系列之3:详解Java数组

时间:2023-09-27 11:08:36浏览次数:35  
标签:Java 定义 int Car TDD 详解 数组 new data


在前面的文章中我介绍了如何通过junit4和TestNG实现参数化,这两种架构都通过二维数组来实现参数化,在这里我就给大家详细的介绍一下java数组。

Junit4定义参数化数据,代码如下:

public static Collection prepareData(){
Object [][]object= {{1,2,3},{0,2,2},{0,3,3}};
return Arrays.asList(object);
}
TestN

G定义参数化数据,代码如下:

@DataProvider     
public Object[][] dp1() {       
return new Object[][] {         
new Object[] { 1, 1,0 },        
 new Object[] { 2, 1,1 },         
new Object[] { 2, 1,2 },      
 };  
}

数组的定义

在java中,数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。

type arrayName[ ];

类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。

例如:

int intArray[ ];

Date dateArray[];

讲到这里,有的同学可能会问?为什么要用数组呢?用变量也可以解决问题啊!但如果现在要求定义1000个整型变量,那么该如何定义呢?定义的结构如下:

int i1, i2, i3, ... i1000;

这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这1000个变量的内容,意味着你要编写System.out.println()语句1000次。

数组的初始化

(1)静态初始化,即定义数组的同时给数组赋值

intintArray[]={1,2,3,4};

String stringArray[]={"abc", "How", "you"};

(2)动态初始化,即先定义数组后给数组赋值

1)简单类型的数组

int intArray[];   //声明未初始化

int Array =newint[5];// 定义占用空间大小(5个int)

2)复合类型的数组

例子1

String stringArray[ ];

String stringArray =newString[3];/* 开辟了一个长度为3的数组 */ 

stringArray[0]=newString("How");//为第一个数组元素开辟空间

stringArray[1]=newString("are");//为第二个数组元素开辟空间

stringArray[2]=newString("you");//为第三个数组元素开辟空间

例子2

这里强调下,数组type arrayName[ ]中的type代表类型,可以是我们熟悉的String、Integer等类型,也可以是我们自定义的类类型,例如

public class Car {
    public void drive() {};
    public void brake() {};
}
Car car1=new Car();
Car car2=new Car();
Car car3=new Car();
//定义一个Car类型的数组,并存放Car类的实例
Car[] carArray = new Car[3];  
carArray[0]=car1;
carArray[1]=car2;
carArray[2]=car3;

数组元素的调用

数组元素的调用方式为:

arrayName[index]

index为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性。

arrayName[0] 代表数组arrayName的第一个元素。

length指明它的长度,例如:intArray.length指明数组intArray的长度。

arrayName[intArray.length-1] 代表数组arrayName的最后一个元素。

4.实例

int [] array1={1,2,3};
for(int i=0;i<array1.length;i++)
            {
                System.out.println(array1[i]);
            }

数组的引用

举个例子来讲解数组的引用

public class ArrayDemo {

    public static void main(String args[]) {

        int data[] = null;
        data = new int[3]; //开辟一个长度为3的数组,data指向这个数组的起始地址
        int temp[] = null; //声明数组对象
        data[0] = 1;
        data[1] = 2;
        data[2] = 3;
        tmp = data;  //tmp指向data所指向的数组地址
        tmp[0] = 9;
        for(int i = 0; i < temp.length; i++) {
            System.out.println(data[i]);
        }
    }
}

运行代码将会输出:

9

2

3

首先data指向这个数组的起始地址,由于tmp初始值为null,所以没有指向任何地址。

测试驱动技术(TDD)系列之3:详解Java数组_数据

 

执行tmp = data;后,tmp和data都指向了这个数组的起始地址

 

测试驱动技术(TDD)系列之3:详解Java数组_数据_02

执行tmp[0] = 9;后,数组里第一个位置的值变成了9 ,所以data[0]也是9。

测试驱动技术(TDD)系列之3:详解Java数组_java_03

 

二维数组

在之前所使用的数组发现只需要一个索引就可以进行访问,那么这样的数组实际上非常像一个数据行的概念。通一个索引就可以取得唯一的一个记录。所以这样的数组可以简单理解为一维数组

测试驱动技术(TDD)系列之3:详解Java数组_数据_04

二维数组本质上是行列集合,要确定某一个数据需要行索引和列索引来进行定位。数据使用的结构是“数组名称[行索引][列索引]”,所以这样的结构就是一个表的结构。

测试驱动技术(TDD)系列之3:详解Java数组_数据_05

代码如下:

int data[][] = new int[][] {
            {1, 2}, {3, 4, 5}, {6, 7, 8, 9}

};

//外部的循环i控制输出的行数,即有几个{};而内部的循环j控制输出列数,即{}里面有几个数据

        for(int i = 0; i < data.length; i++) {
            for(int j = 0; j < data[i].length; j++) {
                System.out.print("data[" + i + "][" + j+ "]=" + data[i][j]+ "、");
            }
        }

输出

data[0][0]=1、data[0][1]=2、

data[1][0]=3、data[1][1]=4、data[1][2]=5、

data[2][0]=6、data[2][1]=7、data[2][2]=8、data[2][3]=9、

多维数组之三维数组

三维数组中每个元素都是一个二维数组,定义如下

int[][][] array ={
                {
                       { 1, 2, 3 },
                       { 4, 5, 6 },
                       { 7, 8, 9 }
                },
                {
                       { 10, 11 },
                       { 12, 13 }
                },
                {
                       { 14, 15, 16 },
                       { 17, 18 }
                }
        };

同理,我们可以推导出4维数组以及n维数组的定义,但是在实际应用中就极其有限了,这里也就不再赘述了。

 

标签:Java,定义,int,Car,TDD,详解,数组,new,data
From: https://blog.51cto.com/liwen629/7621604

相关文章

  • 测试驱动技术(TDD)系列之2:详解TestNG参数化
    上一篇文章介绍了测试驱动的相关概念,并以junit4为例,带大家了解如何在测试框架中实现测试驱动。详情:测试驱动技术(TDD)系列之1:一文带你上手测试数据驱动大家会发现Junit4在同一个测试类中实现多组数据的数据驱动,不是很方便,需要我们自己解决!我也说过在TestNG中这个问题很容易搞定!给自己......
  • 测试驱动技术(TDD)系列之1:一文带你上手测试数据驱动
    数据驱动的意义数据驱动,指在自动化测试中处理测试数据的方式。通常测试数据与功能函数分离,存储在功能函数的外部位置。在自动化测试运行时,数据驱动框架会读取数据源中的数据,把数据作为参数传递到功能函数中,并会根据数据的条数多次运行同一个功能函数。数据驱动的数据源可以是函数外......
  • Java面向对象概念详解
    对象对象有两个层次的概念,现实生活中对象指的是可观世界的实体;而程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。可以将现实生活中的对象经过抽象,映射为程序中的对象,对象是对现实的高度抽象。类对象在程序中是通过一种抽象数据类型来描述......
  • Java String类的 equals、==和intern()
    Java实例的生成我们都知道,java中new一个类的实例是在JVM的堆中完成的,如下图所示:在这里我们以String类为例讲解一些更为细节的东西!String生成实例的代码如下:String str=new String("hello");对于通过new产生一个字符串(假设为” hello”)时,会先去上图的常量池中查找是否已经有了......
  • 详解如何使用VS code搭建JavaScript环境(适合小白)
    对于从事自动化测试的同学来说,有很多自动化测试项目是需要使用JavaScript脚本语言进行coding的,包括selenium、playwright、Puppeteer,那么选择哪种IDE合适呢?在这里我推荐visualstudiocode,即vscode!注意:本文介绍的是JavaScript在后端运行和调试的方法,并未涉及前端(浏览器)相关开发......
  • 详解Windows 安装Docker Desktop(百分百成功)
    相信IT职场同学目前对docker这个概念已经不在陌生,docker在运维同学和开发同学中应用比较广泛,测试同学想要进行实操则在很大层度上需要运维同学的配合(在指定的服务器上进行),这就需要看别人脸色行事,或多或少会有少许不爽;加之现在各种工具也都提供了docker镜像,我们在做工具调研时可......
  • 「Java开发指南」在MyEclipse中的Spring开发(三)
    在上文中(点击这里回顾>>),我们介绍了如何管理多个Beans和项目、Spring配置编辑器等,本文将继续介绍AOP、WebFlow支持等,要持续关注哦~MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论6.AOP支持BeansCrossReferences视图显示了所有被建议的beans......
  • 详解分布式系统核心概念——CAP、CP和AP
    最近研究Sykwalking,当调研oap如何进行集群部署时发现:skywalkingoap之间本身不能搭建集群,需要一个集群管理器来组建集群,它支持nacos、zookeeper、Kubernetes、Consul、Etcd五种集群管理器。我重点比较了nacos和zookeeper,发现二者最大的区别是Zookeeper采用了CP架构,nacos既支持CP......
  • 铷原子钟(铷钟)时间频率标准技术参数详解
    铷原子钟(铷钟)时间频率标准技术参数详解铷原子钟(铷钟)时间频率标准技术参数详解京准电子科技官微——ahjzsz铷原子频率标准主要有高精度授时型GPS北斗接收机、高性能铷原子钟、低相噪锁相电路、控制模块和高精度滤波模块组成。通过数字锁相技术综合了GPS北斗的长期稳定性、铷原子......
  • 详解git pull命令和使用过程中遇到的常见问题:fatal: ‘origin‘ does not appear to b
    使用gitpull同步远程代码使用git管理测试相关代码时,因为测试代码本身量级不大,所以很少使用分支,默认都使用master(主分支),当我们想要从远程origin(origin是远程仓remoterepository,clone到本地的默认名字)。当主机的master分支拉取代码过来和本地的当前分支进行合并时,需要使用如下命令:g......