JavaSE基础-数组

今天我们需要掌握:会写数组和数组的应用。

一、了解数组

数组是什么?我们为什么要学数组?

数组可以比作一个容器,是用来存储一批同种类型的数据。

它的格式为:

int [] arr = {};
//数据类型 [] 数组名 = {元素1, 元素2, 元素3};

之前我们学过变量,变量可以存放数据,而数组也同样是存放数据,他们有啥区别?

换句话说,有变量,我们为什么还要用数组?

变量,每次只能存放一个数据。

如果我们需要存放多个数据,怎样用变量来解决?

首先定义多个变量,然后录入所需要的数据。

这样写虽然能解决需求,但会使代码变得很繁琐。

而数组只需要定义一个变量,照样完成需求。并且代码简洁,逻辑清楚。

因此在处理批量数据时,我们会引用数组。

二、定义数组

Java中定义数组有两种形式:静态初始化数组和动态初始化数组。

  1. 静态初始化数组

定义:在定义数组时,直接给数组赋值。

元素:如果把数组看作是一个容器,容器里面的每一个数据我们通常称之为元素。

表示静态初始化数组的写法有三种:

完成版:

int [] arr = new int [] {};
//数据类型 [] 数组名 =  new 数据类型 [] {元素1, 元素2, 元素3};

简洁版:

int [] arr = {};
//数据类型 [] 数组名 = {元素1, 元素2, 元素3};

通常在写代时,常用这种书写形式。

简洁版,第二种写法:

可以将中括号放在数组名后面。

int arr [] ={};
//数据类型 数组名 [] = {元素1, 元素2, 元素3};

在定义数组时,需要注意:

什么类型的数组只能存放什么类型的数据。

比如:

int arr [] ={85.4, 85.3};
//这种写法就是错误的,这里我们定义的是一个整型,给的数据却是double。
//在运行时就会报错。

数组在计算机中的基本原理

计算机中的程序都是在内存中运行的。

数组在内存中开辟一个空间。

如果我们给数组存入数据,存入的数据会另开辟一个空间,这个空间的名字是地址名。

而一开始开辟的数组存入的是地址。

在调用数组时,数组会指向存储中的地址,从而调用地址中的数据。

看图方便理解:

注释:图片截取自黑马程序员。

数组的访问

怎样访问数组呢?

换句话说:将数据存入存入数组,怎样输出数组中的数据?

//数组名 [];
int [] sr = {50, 80, 90, 100}
//            0    1  2     3
    System.out.println(数组名[0] );//输出数组中的第一个
    System.out.println(数组名[1] );//输出数组中的第二个
    System.out.println(数组名[2] );//输出数组中的第三个
    System.out.println(数组名[3] );//输出数组中的第四个

上面这个代码,我们可以知道数组中有4个数据。如果给出的数组量太大,我们怎么知道里面有多少个数据?

//数组名.length  
//比如接着上个代码
sr.length//这个表示的就是sr中有多少个数据
System.out.println(sr.length);//打印出sr有少个数据

小技巧:获取数组的最大索引:数组名.length - 1;

但是有一个前提:数组中的元素需大于0。

数组的遍历

什么是数组中的遍历呢?

就是一个一个的访问容器中的数据。

在数组求和,元素搜索,找最大值和最小值时需要遍历数组。

int sr = {50, 70, 80, 66, 3};//定义数组
for(i=0; i < sr.length; i++){
    System.out.println(sr[i]);//输出每个数组的值
}

情景练习:

需求:狗蛋老师发财了,想让小白算一下自己现在有多少存款?

现狗蛋老师各个银行卡的存款如下:50万,3万,2万,25万。

新手小白听完狗蛋老师的需求,当即拍头写下如下代码:

int [ ] money ={50, 3, 2, 25}//定义数组money存放数据
int sum = money[0]; //定义求和项,并将数组中的第一个数据放入其中
for(i=1;i<money.length;i++ ){ //数组遍历,进行累加操作
    //因为第一个50已经放入求和项中,所以从第二个开始进行累加
    sum += money[i]; //累加 sum =sum + money;
}
Systey.out.println("狗蛋最后的存款为:"+ sum);//输出狗蛋老师一共的存款
  1. 动态初始化数组

前面我们学习了静态初始化数组。

但现实生活中还有这一种需求:某校开展了一场唱歌比赛,选手唱完后,十个评委老师要进行打分,最后选手的平均分数是他的最后成绩。

首先它也是进行多个数据处理,但是无法直接赋值。

这里就需要用到动态初始化数组。

动态初始化数组的定义:定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度。

动态初始化数组的格式:

int [ ] rc = new int [3];
//数据类型 [ ] 数组名 = new 数据类型 [长度];

其实动态数组也已经给数据进行了赋值,只不过初始值是0。

上面这个代码,定义了一个含有3个数据的动态数组,他相当于静态数组:

int [ ] rc = new int []{0, 0, 0};

为了满足学校唱歌比赛打分的需求

新手小白敲下如下代码:

double [ ] scores = new double [10];//定义动态数组存放评委打分数据
Scanner sc = new Scaneer(System.in);//扫描器,得到键盘扫描对象
for(i=0;i<scores.length;i++){
    System.out.println("请输入第"+i+"个评委的分数");//提示用户输入数据
    double score = sc.nextInt();//等待用户输入数据,赋值给score
    scores[i] = score; //将用户给的数据赋值到数组中
}
double sun = 0; //定义求和项
for(i=0;i<scores.length;i++){
    sum += scores[i];//相加
}
System.out.printf("最后该选手的分数是:"+sum/scores.length);//输出平均值

总结动态初始化数组的特点:先定义,默认值为0,后赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值