第5章 实验 – 数组
5.1实验目标
(1) 理解在Java中如何声明、分配和使用(多维)数组 (2) 学习数组排序和查找的基本算法
(3) 了解JAVA Reflection API 和其他常用类
5.2实验说明
本章实验教程将介绍数组(array)的使用,学习Java数组相关的类Array和Arrays。简单介绍Java反射(Reflection)的用法。
以下的实验包括4种类型, 每种类型都用括号里面的字母表示: D - 例程, 表示这是一个例子, 要求练习者阅读指南和代码; I - 交互式练习, 练习者完成实验指定的简单任务,如修改部分代码, 观察程序运行时的变化等; W - 热身练习, 练习者的编程工作量逐渐加大。
P - 完整编程 ,要求练习者根据要求,完成完整的JAVA程序。
5.3实验准备
从本实验教程光盘中拷贝Lab05文件目录到本地磁盘, 如D: 盘。Lab05文件目录中将包含本次实验所需的所有资料。 Lab05的相关资料也可以从本实验教程的网站下载:http://javaLab/ 将Lab04中的(程序清单4-6)程序拷贝到Lab05目录下。
5.4实验任务
实验5.4.1: (D)数组的基本概念
Java变量(variable)可以存储程序的数据,每个变量有标识、类型和作用域。使用同种类型和作用域的多个数据时,我们通常把这些数据存放在一个数据结构而不是单个的变量中。最常见的数据结构是数组(array)。一个数组中能够存储的数据个数是固定的,并且存放的数据类型相同。尽管数组是一个对象,但是数组的用法与基本数据类型相似。
图5.1可以帮助我们理解数组的结构。
图5.1 长度为8的数组
这是一个有8个元素的数组,数组中的每个元素有各自的值。图中每个元素上方的数字表明了元素的索引(index)。数组中的元素总是使用索引引用的。第一个元素的索引总是为0。重复,第一个元素的索引总是为0,而最后一个元素的索引总是“数组长度-1”。上图的数组中,最后一个元素的索引是 8-1 = 7。
我们可以创建任何数据类型的数组。下面来看一个整型数组的例子。
编译并运行,输入0到100之间的一组整数为命令行参数。假设输入的这组整数就是考试成绩,这个程序将显示原始成绩和调整后的成绩。成绩调整的规则是:将最高成绩上调到100分,计算调整的幅度,再根据幅度相应调整其他成绩。
程序清单5-1:
// Given a sequence of exam scores as // command-line arguments, displays table // of exam scores and curved scores.
public class ExamScores1 {
public static void main(String[] commandLineArgs) {
if ( h == 0 ) {
.print(\ .println(\ .print(\ .println(\ .println(\ (0);
} // if no command-line arguments
// Named constant for width of displayed columns: final int columnWidth = 5;
// Named constant for the number of scores: final int numberOfScores = h;
// Declare reference to array // which will store exam scores: int[] scores;
// Instantiate (create) the array itself,
// i.e. allocate space to store the exam scores: scores = new int[numberOfScores];
// Read scores into array and determine maximum: int maximumScore = 0;
for ( int i = 0; i < h; i++ ) {
scores[i] = Int(commandLineArgs[i]);
maximumScore = (maximumScore, scores[i]); } // for i
// Determine how many points to curve up all scores: int curveUp = 100 - maximumScore;
// Output table of original scores and curved scores for ( int i = 0; i < h; i++ ) {
// Print original score in a right-justified column: String scoreText = ing(scores[i]);
for ( int j = h(); j < columnWidth; j++ ) .print(\ .print(scoreText);
// Calculate curved score;
int curvedScore = scores[i] + curveUp;
// Print curved score in a right-justified column; String curvedScoreText = ing(curvedScore); for ( int k = h(); k < columnWidth; k++ ) .print(\
.println(curvedScoreText); } // for i
} // method main(String[]) } // class ExamScores1
大家可能已经发现,源代码中main方法的命令行参数数组的名字与惯常不同,这里使用了commandLineArgs。其实使用什么名字作为命令行参数的数组名并没有关系,只要这个名字在整个main方法中保持一致就行。在一个具体的程序中,我们通常把命令行参数数组取名为args,把命令行参数个数的变量取名为argv,命令行参数数组是一个字符串数组。
程序中需要跟踪所有的成绩,因此将考试成绩存放在一个int型数组中。创建数组的三个步骤是:(1)声明一个数组引用变量;(2)实例化(创建)数组本身,也就是为数组分配内存空间;(3)初始化数组中的每个变量。
1. 数组的声明
第5章 实验–数组
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)