P33-P38:关于数组

**

P33-P38(关于数组):

**

一、Java当中数组的定义

定义规则

在这里插入图片描述

举例

举例一:

在这里插入图片描述

举例二:

int[] numbers = new int [100];

int[ ] numbers代表一个叫做 numbers 的 int 类型的数组
= new int [100];等号代表对这个数组进行初始化,创建一个新的可以放一百个 int 的数组(new无需深究,它的意思是创建)

二、认识数组

数组的特点

  • 数组是一种容器(放东西的东西)
  • 其中所有的元素具有相同的数据类型
  • 一旦创建 不能改变大小
    若违背了特点2,则会自动报错类型不匹配,eg:
    在这里插入图片描述

数组的下标规则

在这里插入图片描述
数组的有效下标: 0到数组元素个数减一
若超出了有效下标,编译器不报错,但是运行时会显示 “数组的索引越过了边界 在xx那一行”:
在这里插入图片描述

三、未知数组元素个数时,如何写出安全的程序?

数组的元素个数可以是变量!

  • 问题:在这里插入图片描述
  • 解决
    在这里插入图片描述
    动态的根据程序运行时候的数据来创建数组,但是数组在运行的过程当中是不能改变的!

四、每个数组的内部成员:length

每个数组有一个内部成员length,会告诉你它的元素的数量!

写程序时怎么用length?,如下
在这里插入图片描述
使用数组名.length

for(i=0;i<数组名.length;i++)

这样子写的好处是:
这个for循环是用来遍历整个数组的,无论数组的大小是怎么确定的,无论是固定的100还是叫做某个名字的变量,跟for循环怎么写都无关,总之这个for就是在遍历整个数组!

五、关于初始化数组

在这里插入图片描述

六、关于数组的赋值、普通变量与数组变量的区别

为什么下面情况中,将数组 a 赋值给数组 b 之后,改变b[0]的值,a[0]的值也被改变掉了?
在这里插入图片描述
解释:普通变量与数组变量的区别:

  • 普通变量是所有者,在变量里面,变量拥有数据;
    关于普通变量的赋值,一方的改变不会影响另一方,两者之间独立无关。

  • 数组变量里面,那个变量只是一个管理者,变量里面没有数据,变量只是在管着一个放在另外某个地方的数组;
    若将一个数组变量赋值给另一个数组变量,eg:int[ ] b = a,只是让那些数组元素多了一个管理者,让b去管a所管的那个数组,只是让那些数组元素有了a和b两个管理者,故 b[0]=16,就代表b所管理的数组中编号为0的那个单元变成16,当然在读a[0]的时候也是16,那个单元叫b[0]也叫a[0]。
    在这里插入图片描述
    数组变量赋值思维实例:
    在这里插入图片描述
    在这里插入图片描述
    总结:
    在这里插入图片描述
    数组变量之间的比较是判断是否管理同一个数组?eg:
    在这里插入图片描述
    尽管上图中,a和b的内容是相同的,但是它们是两个独立不同的数组,a和b这两个管理者管着不同的数组,所以被认为是不相同的。

七、如何复制数组?

既然 int[ ] b = a 不能给我们创建一个新的数组,只是可以让它们可以管理同一个数组,那如何做到把一个数组里面所有东西交给另外一个数组呢?

必须使用遍历的方法将每个元素逐个拷贝给目的数组!

八、一个关于程序的思路点

每次想一个程序,想两件事情:数据(需要往进读什么数据?)+算法(需要什么处理?)

一个小练习

在这里插入图片描述
在这里插入图片描述

九、数组的遍历

新知识:for-each循环(一个方便的遍历数组的方式)

在这里插入图片描述
如同上图右边的程序所使用的for:

for(<类型> <变量> :<数组>)
{
       ......
}

eg:

  • for(int k:data)
    {

    }
  • 读它的方式:对于data这个数组当中的每一个元素取出来,循环的每一轮把它拿出来作为int类型的变量k。
  • 所以循环的每一轮,这个k是不断会变的,k在第一轮等于data的 0,k在第二轮等于data的 1

什么时候用for-each循环?

for(int k:data)
  {
          ......
  }

它特别适合于遍历一个数组的场合,比如 要去遍历整个数组,拿出数组的每一个元素出来去做一些事情,比如说做比较或者赋值给别人等等,这个时候特别适合用for-each循环。

什么时候不用for-each循环?

  • 表达位置不能用:在for-each循环里面没有位置,当我们拿出k的时候,我们并不知道这个k是第几个;
  • 改变数组不能用:我们也不能用这种循环来给数组做赋值,因为k只是一个变量,它和那个数组的某个元素之间只是一个值的对应的关系,而并不是具体存储位置的对应关系(通过for-each循环,我们不可以去修改数组,但是可以读出数组中的每一个值)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值