07-JAVA一维数组及多维数组(2)

1. Java数组的定义:

1) 和其它编程语言的数组定义基本相同,具有2要素,分别是类型一致(数组中的数据都是一种类型的)和定长(初始化时就已经确定长度,这也意味着数组的内存空间也确定了,即大小不变了);

2) 在Java中数组类型也是一种引用类型,底层是用面向对象的类实现的;

3) 定义数组:支持两种格式

i. Java格式:type[] arrayName;

ii. 传统的C语言格式:type arrayName[];  // 为了满足C程序员的编程习惯

!!更加推荐Java风格的,因为其类型一目了然(type[]类型),一看就知道是个数组;

!!上面的arrayName就是个引用类型变量,其类型是type[];

4) 定义数组变量时不能指定数组长度,例如type[5] arrayName是不对的,因为type[]是一种类型,不能出现和初始化相关的内容,而指定数组的长度是初始化时指定的!

2. 数组初始化:

1) 毕竟type[]也是一种面向对象的类型,因此也需要使用new运算符来创建数组对象(开辟内存空间);

2) 支持两种初始化方式:

i. 静态初始化:不指定长度,但显示指定每个数组元素的值(Java自动根据初始化元素的个数决定数组长度);

ii. 动态初始化:只指定一个长度,但不给出每个元素的值,让Java自动赋予每个元素初始化值(0/null);

!!不能同时结合两种初始化方式初始化,否则编译器会直接报错!Java将这两种初始化逻辑严格地分开了;

3) 静态初始化:

i. 格式:arrayName = new type[] {ele1, ele2, ele3...};

ii. 还有一种简化版的静态初始化,其格式是:type[] arraryName = {ele1, ele2, ele3...};  // 可以不用写new type[],其风格和C语言一样

!!但不过简化版的语法只能在定义数组变量的同时使用,不能定义和初始化分开!!否则会编译报错!而完整版的可以分开;

iii. 当然支持继承的特性,例如:Object[] objArrary = new String[] {"xxx", "xxx"...};  // 向上转化类型

5) 动态初始化:

i. 格式:arrayName = new type[len];

ii. 这种方式往往应用在长度较大的数组上;

iii. Java会自动为每个元素赋予初值(0/null);

!!不能同时使用两种初始化方法(例如:int[] arr = new int[5] {1, 2, 3, 4, 5};),会直接编译报错的!!

3. 使用数组:

1) 使用方法和C语言基本一样,使用[]索引数组中的元素;

2) length属性:arrayName.length将返回数组长度,这个非常常用,可以利用这个在for循环中迭代

3) forEach迭代:

i. Java5引入的新的数组、集合迭代方法,和Python的迭代相同;

ii. 格式:for (type varName: array | collection) { ... }

iii. 即用一个临时变量varName来逐个接受数组|集合中的每个元素,varName就是那个迭代值,它是一个临时变量,不能用于改变数组元素的值,相当于数组的视图;

iv. type必须要和数组/集合中元素的类型相匹配;

v. 示例:

[java] view plain copy

  1. int[] arr = new int[] {1, 2, 3, 4, 5};
  2. for (int v: arr) {
  3. System.out.println(v);
  4. }

!无需用迭代计数变量i来迭代了!很方便!

!!注意:上述不能用v来改变数组中的元素,因为v只是一个临时变量(如果在for循环体中写这样的语句,v = xxx;之类的并不能实际改变数组中的元素!);

4. 多维数组:

1) Java其实没有多维数组,多维数组其实就是通过一维数组模拟的;

2) 比如二维数组,其实就是一个一维数组,数组中的每个元素都是一个一维子数组,这就形成了一个二维数组;

3) 虽然多维数组的意义是这样的,但是实际编程时不能根据意义编写,因为Java专门提供了多维数组的语法:

i. 你可能会想type[]是一个一维数组类型,那么type[] + []不就是type[]类型的一维数组了吗?那不是后面那个[]代表行,前面那个[]代表列了吗?

ii.
这在理解上没问题,确实是这样,但是Java的多维数组语法并不这样定义,在上面的例子中,前面的[]代表行,后面的那个[]代表列,因为在编程语法上这样更符合一般多为数组的使用习惯,因此就不用前面的那种非常别扭的定义(虽然前一种定义非常合理,但是使用起来特别别扭);

iii. 因此Java的多维数组type[][][]...,越前面的[]代表越高的层级,越后面的[]代表越低的层级(即越前面的[]代表越高维,越后面的[]代表越低维);

4) 多维数组的初始化:和一维数组一样,也是静态和动态两种

i. 原则还是一样的,两者不能同时使用;

ii. new type[][].. 的[]中不能有任何东西就是静态,如果任意一个[]有数字那就是动态;

iii. 静态就必须在new type[][]...后面使用{}给出指定初始值,动态就不能用{}指定初始值,不管数组出现在哪个[]中;

iv. 例如:

[java] view plain copy

  1. int[][] a = new int[][] {new int[3], new int[] {1, 2, 3}, {3, 4, 5}};
  2. int[][] b = {new int[3], new int[] {1, 2, 3}, {3, 4, 5}};
  3. int[][] c = new int[2][];
  4. int[][] d = new int[][3];  // 错误!!多维数组必须动态初始化时必须先指定高维!
  5. int[][] e = new int[2][3];
  6. int[][] f = new int[2][] {new int[3], new int[4]}; // 错误!!动静混用!

!!可以看到,在任何一维都可以使用静态简化版初始化,非常灵活非常骚;

时间: 2024-10-14 07:47:19

07-JAVA一维数组及多维数组(2)的相关文章

java数组(一维数组,二维数组)

数组初始化: 1,动态初始化:数组定义与为数组分配空间和赋值的操作分开进行 2,静态初始化:在定义数组的同时就为数组元素分配空间并赋值 3,默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此,数组分配空间之后 每个元素也被按照成员的规则被隐士的初始化值 ------------------------------------------------. 一维数组: package day06; import java.util.Date; /*** * 数组演示 * 数组的声明: * t

JAVA的 一维数组、二维数组、三维数组、多维数组等。

这个数组可以看做新手学习,从一维数组 到 多维 数组 循环渐进,其实看起也很简单,一看便知,众所周知,一维.二维或许经常用到,用到二维以上应该就很少了. public class test { public static void main(String[] args) { /*一维数组*/ int num[] = {0,1,2}; /*下面输出 3 行数据,0 ~ 2*/ for (int i = 0; i < num.length; i++) { System.out.println("

java基础中的一维数组和二维数组

1.数组:具有相同数据类型的一组数据的集合. 一维数组 2.创建一维数组 a.数组作为对象允许使用new关键字进行内存分配,使用数组之前,必须首先定义数组变量所属类型,即声明数组.  声明数组: 语法:数组元素类型   数组名字[]; 数组元素类型[]  数组名字: 注释:数组元素类型:决定了数组的数据类型,包括基本数据类型和费基本数据类型. 数组名字:为一个合法的标识符,自己去定义 []:指明该变量是一个数组类型变量,单个"[]"表示要创建的是一维数组. 例如:int arr[];

Java基础学习第六天——二维数组与面向对象入门

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.02.25 lutianfei none 二维数组 格式1(动态初始化) 格式:数据类型[][] 变量名 = new 数据类型[m][n]; m表示这个二维数组有多少个一维数组 n表示每一个一维数组的元素个数 举例: int[][] arr = new int[3][2]; 定义了一个二维数组arr 这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2] 每个一维数组有2个元素,可以通过arr[m]

7、一维数组和二维数组耳朵创建,输出,Arrays.fill()替换

package com.xxx.xxx; import java.util.Arrays; public class demo8 { /** * 1.初始化一维数组 使用一维数组 * 2.初始化二维数组 使用二维数组 * 3.填充替换数组元素 * @param args */ public static void main(String[] args) { //1.第一种初始化方式 int arr[] = new int[]{1,2,3,4,5,6}; //一维数组 //1.1.第二种初始化方式

Java中如何获取多维数组的长度

在程序处理中遍历数组是一种很常见的操作,但遍历数组时,我们需要知道数组各维度的长度(一维数组除外,for each 可以遍历),下面举例说明如何求多维数组的长度. 一维 : int [] array ={1 2 3 4 5} ; size = array.length() ; 二维数组: Java实际上没有多维数组,只有一维数组.多维数组可以理解为"数组的数组" :举例二维数组其实是一个一维数组,数组中每个元素是一个一维数组.从而得到行列的长度为 . int  [ ] [ ] arra

2018/4/11[学了一维数组和多维数组,但是做的是选择的题]

用的教材是清华大学出版社的<JAVA语言程序设计> 今天上课讲的是一维数组和多维数组 二维数组就是由多个一维数组组合而来的 多维数组就是依次向下的数组累计而来 比如: 三维=n个二维=nxm个一维 学的虽然是皮毛,习题近期会努力做一下! po上来第三章的习题 刚修改完的 3-3 1 package javatext; 2 3 import java.util.Scanner; 4 public class P3_3 { 5 6 public static void main(String[]

C#一维数组,二维数组,多维数组

所谓的数组,就是相同数据类型的元素的元素按一定顺数排列的集合,就是把有限个类型相同的变量用一名字命名,然后用编号区分他们的变量的集合,这个名字成为数组名,编号称为下标.组成数组的各个变量成为数组的分量,也称为数组的元素,有时也称为下标变量,数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式.这些按序排列的同类数据元素的集合成为数组. 数组又分为一维数组,二维数组,多维数组 一维数组用一个整数来索引,多维数组用两个或多个整数来索引. 一.数据类型[] 变量名

16.10.20 4th 1蛤蟆爬井 2一维数组 3二维数组

摘要 1蛤蟆爬井 2一维数组 3二维数组 例子 井深10米, 蛤蟆白天爬5m,晚上落4米,求几天爬出来. //思路,用循环语句来做,for因为是未知次数所以排除,while 先判断后运行排除, dowhile,先爬在判断所以可以 int gaodu = 0; int tianshu = 0; boolean tianse = true; do{ if(tainse){ //白天爬5米 gaodu+=5; //爬完后改黑天 tianse = false; //天数+1 tianshu +=1; }