JAVA-数 组
来源:互联网 发布:上海java招聘 编辑:程序博客网 时间:2024/05/21 06:56
模块五 数 组
模块五 数 组... 1
1. 数组的声明... 2
2. 创建数组... 2
2.1. 创建原始类型数据数组... 2
2.2. 创建对象类型数据数组... 3
3. 初始化数组... 3
4. 多维数组... 4
5. 数组界限... 4
6. 拷贝数组... 5
7. 练习: 使用数组... 5
7.1. 基本数组的使用... 5
7.2. 数组的数组... 6
7.3. 检查你的进度... 6
本模块将描述Java编程语言中如何定义、初始化和使用数组。
完成本模块的学习后,你应该能够:
- 声明并创建原始数组、类数组及多维数组
- 解释为什么数组的元素需初始化
- 给出数组定义并初始化数组元素
- 确定一个数组中元素的数量
- 编写代码将数据从一个数组拷贝另一个数组
1. 数组的声明
数组是用来表示相同类型数据的,你可以声明任何类型的数组──原始类型或类类型:
char s[ ];
Point p[ ]; // where point is a class
在Java编程语言中,无论数组元素由原始类型构成,还是由类构成,数组都是一个对象。声明不能创建对象本身,而创建的是一个引用,该引用可被用来引用数组。数组元素使用的实际存储器可由new语句或数组初始化软件动态分配。
上述这种将方括号置于变量名之后的声明数组的格式,是用于C、C++和Java编程语言的标准格式。这种格式会使声明的格式复杂难懂,因而,Java编程语言允许一种替代的格式,该格式中的方括号位于变量名的左边:
char[ ] s;
Point[ ] p;
这样的结果是,你可以认为类型部分在左,而变量名在右。上述两种格式并存,你可选择一种你习惯的方式。声明不指出数组的实际大小。
注意:当数组声明的方括号在左边时,该方括号可应用于所有位于其右的变量。
char[ ] s1, s2; // s1,s2都是字符数组。
char s1[ ],s2; // s1是字符数组,s2是字符。
2. 创建数组
用来指示单个数组元素的下标必须总是从0开始,并保持在合法范围之内--大于或等于0,并小于数组长度。任何访问在上述界限之外的数组元素的企图都会引起运行时出错。下面还要谈到一些更好的数组初始化方法。
2.1. 创建原始类型数据数组
public int[] createIntArray() stack heap
int[] 1 2 3 4 5
k=new int[5];
for(int I=0;I<k.length;I++)
你可以象创建对象一样,使用关键字new 创建一个数组。
k = new int [5];
创建了一个5个int值的数组,
2.2. 创建对象类型数据数组
3. 初始化数组
当创建一个数组时,每个元素都被初始化。在上述char数组s的例子中,每个值都被初始化为0 (/u0000-null)字符;在数组p的例子中, 每个值都被初始化为null,表明它还未引用一个Point对象。在经过赋值 p[0] = new Point()之后,数组的第一个元素引用为实际Point对象。
Java编程语言允许使用下列形式快速创建数组:
String names [ ] = {
“Georgianna”,
“Jen”,
“Simon”,
};
其结果与下列代码等同:
String names [ ] ;
names = new String [3];
names [0] = “Georgianna”;
names [1] = “Jen”;
names [2] = “Simon”;
这种”速记”法可用在任何元素类型。例如:
MyDate Dates[ ] = {
new MyDate (22,7,1964),
new MyDate (1,1,2000),
new MyDate (22,12,1964)
};
适当的类类型的常数值也可被使用:
Color palette [ ] = {
Color.blue,
Color.red,
Color.white
};
4. 多维数组
Java编程语言没有象其它语言那样提供多维数组。因为一个数组可被声明为具有任何基础类型,所以你可以创建数组的数组(和数组的数组的数组,等等)。一个二维数组(JAVA中没有二维数组的概念,二维数组其实就是数组的数组)如下例所示:
int twoDim [][] = new int [4][];
twoDim[0] = new int[5];
twoDim[1] = new int[5];
首次调用new而创建的对象是一个数组,它包含4个元素,每个元素对类型array of int的元素都是一个null引用并且必须将数组的每个元素分别初始化。
注意:
尽管声明的格式允许方括号在变量名左边或者右边,但此种灵活性不适用于数组句法的其它方面。
例如: new int [ ][4]是非法的。
因为这种对每个元素的分别初始化,所以有可能创建非矩形数组的数组。也就是说,twoDim的元素可按如下方式初始化:
twoDim[0] = new int [2]
twoDim[1] = new int [4];
twoDim[2] = new int [6];
twoDim[3] = new int [8];
由于此种初始化的方法烦琐乏味,而且矩形数组的数组是最通用的形式,因而产生了一种”速记”方法来创建二维数组。例如:
int twoDim [ ][ ] = new int [4][5];
可被用来创建一个每个数组有5个整数类型的4个数组的数组。
5. 数组界限
在Java编程语言中,所有数组的下标都从0开始。 一个数组中元素的数量存储在length属性中; 这个值被用来检查所有运行时访问的界限。如果发生了一个越出界限的访问,那么运行时的报错也就出现了。
使用length属性的例子如下:
int list [ ] = new int [10];
for (int i= 0; i< list.length; i++){
System.out.println(list[i]);
}
使用length属性使得程序的维护变得更简单。
6. 拷贝数组
数组一旦创建后,其大小不可调整。然而,你可使用相同的引用变量来引用一个全新的数组:
int myArray [ ] = new int [6];
myArray = new int [10];
在这种情况下,第一个数组被丢弃,除非对它的其它引用保留在其它地方。
Java编程语言在System类中提供了一种特殊方法拷贝数组,该方法被称作arraycopy()。例如,araycopy可作如下使用:
int myArray[] = { 1, 2, 3, 4, 5, 6 }; // original array
int hold[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; // new larger array
System.arraycopy(myArray, 0, hold, 0, myArray.length); // copy all of the myArray array to the hold
// array, starting with the 0th index
这时,数组hold有如下内容:1,2,3,4,5,6,4,3,2,1。
注意:如果数组保存的是基本类型的话直接把值拷贝过来。如果数组存放的是引用类型(类类型,数组类型(多维数组的拷贝)等),那么拷贝的是引用类型的地址。请看下面的例子:
class TestDArray
{
public static void main(String[] args)
{
int [][] a=new int[5][];
for(int i=0;i<a.length;i++)
a[i]=new int[i+1]; //给数组的每个元素初始化大小
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
a[i][j]=i+j;
}
}
int[][] b=new int[a.length][];
System.arraycopy(a,0,b,0,a.length);
for(int i=0;i<b.length;i++)
{
for(int j=0;j<b[i].length;j++)
{
b[i][j]=i+j;
System.out.print(b[i][j]);
}
System.out.println();
}
}
}
7. 练习: 使用数组
7.1. 基本数组的使用
1. 创建一个称作BasicArray的类,在...main()方法中声明两个变量,一个是thisArray,另一个是thatArray,它们应属类型array of int。
2. 创建一个数组,它有10个int值,范围从1至10。分配这个第三数组的引用给变量thisArray。
3. 使用for()循环打印thisArray的所有值。如何控制循环的次数?
4. 编译并运行程序。多少值被打印?这些值是什么?
5. 对每个thisArray的元素,建立它的值为索引值的阶乘。打印数组的值。
6. 编译并运行程序。
7. 分配thisArray的引用给变量thatArray。打印thatArray的所有元素。
8. 编译并运行程序。tyatArray的多少值被显示?这些值是什么?它们来自何处。
9. 修改thisArray的某些元素,打印thatArray的值。
10. 编译并运行程序;在thatArray的值中,你注意到了什么?
11. 创建一个有20个int值的数组。分配新数组的引用给变量thatArray,打印thatArray的值。
12. 编译并运行程序。每个数组有多少值被显示? 这些值是什么?
13. 拷贝thisArray的值给thatArray。你将使用什么方法调用? 你将如何限制拷贝元素的数量? thatArray的元素10至19有什么变化?
14. 打印thatArray的值。
15. 编译并运行程序。你所显示的值都是正确的吗?如果不是,你知道有那些内容理解得不对吗?
16. 改变thatArray的某些值;打印thisArray和thatArray。
17. 编译并运行程序。这些值是你所期待的吗?
7.2. 数组的数组
1. 创建一个称作Array2D的类,在main()方法中声明一个称作twoD的变量,它应属类型array of array of int。
2. 创建一个元素类型为int的数组,该数组应包括4个元素并被赋值到变量twoD的elements[0]。
3. 编写两个嵌套for()循环语句以打印twoD的全部值。以矩阵的格式安排输出 (可采用System.out.print()方法)。
4. 编译并运行程序。 你应该能发现此时出现了运行错误(空指针异常) ,这是因为twoD的elements[1] 至 [3]未被初始化。
5. 分别创建包括5个、6个和7个元素的int数组,将这些数组的引用分别赋予twoD的elements [1],[2]和[3];确认完成上述操作的代码是在第3步所描述的嵌套for()循环之前插入的。
6. 编译并运行程序。这次你应该看到一个零值的非矩形布局。
7. 赋予twoD数组的每个元素一个明显的非零值(提示:使用Math.random() 以获得随机值)。
8. 声明一个属类型array of int的称作oneD的变量。然后, 创建一个包括4个元素的int数组。将该数组的引用分别赋予数组array twoD和oneD的第一个元素。赋值后,打印oneD和twoD数组。
9. 编译并运行程序。请注意通过打印oneD的值而显示的单个数组与twoD数组的元素是相同的。
7.3. 检查你的进度
在进入下一模块之前,请确认你已经能够:
- 声明并创建原始数组、类数组或数组类型
- 解释为什么数组的元素需初始化
- 给出数组定义并初始化数组元素
- 确定一个数组中元素的数量
- 创建多维数组
- 编写从一个数组类型到另一个数组类型数组值的拷贝代码
- JAVA-数 组
- java 数 组
- JAVA入门教程: 第 五 章 数 组
- JAVA入门教程: 第 五 章 数 组
- 幸运数 - 第四届蓝桥杯java B组
- Java-组个最小数 (20)
- java 字符数,字节数
- JAVA 数型转换
- JAVA回调函数
- Java猜数游戏
- 数结JAVA
- java回调函数
- Java回调函数
- Java 回调函数
- java回调函数
- Java 回调函数
- Java 回调函数
- Java回调函数
- 一晃就是两年了,写第二篇
- 2007年渴望一个全新的开始
- Using the Server Custom Actions
- 前方无绝路:计算机专业应届生的工作出路
- .net2003的配置错误
- JAVA-数 组
- 越嫁不掉就越嫁不掉
- JAVA-继承
- 手把手教你玩转SOCKET模型之重叠I/O篇
- [python]一行搞定字符串排序
- C-指针
- 用WebService获取服务端硬件信息和客户端IP,MAC,浏览器信息,所在城市- -
- [收藏]开发SQL Mobile程序的准备工作
- C-结构体与共用体