数组是同一类型变量的有序列表组成的一个变量。数组包含的变量称为元素。可以根据任何数据部件创建具有元素的数组,但数组中的每个元素都必须是从同一个数据部件创建的。只要不超过编程语言和系统资源的限制,数组可以包含任意数目的元素。此练习向您介绍 EGL 中的数组并显示如何创建处理数组的 Web 页面。有关 EGL 中的数组的更多信息,请参阅帮助中的数组。
固定数组和动态数组是作为单独的变量而不是记录部件的一部分创建的数组。(在记录部件中创建的数组称为结构字段数组,将在此练习的后面讨论。)固定数组也称为静态数组,虽然在运行时可以添加或除去元素,但在创建时指定了元素的个数。动态数组在创建不指定元素个数。
要创建固定数组或动态数组,首先指定它的名称和它的元素所属于的数据部件。然后,添加一对方括号,方括号的作用是将变量定义为数组。对于固定数组,方括号包含数组中元素的个数;对于动态数组,方括号是空的。对于任一类型的数组,可以选择设置 maxSize 属性以设置数组可包含的最多元素个数。
例如,以下代码创建了 int 元素的固定数组。此数组在创建时有 5 个元素,但由于它没有指定的最大大小,所以可以对它添加或除去元素。
myArray1 int[5];
以下代码创建 int 变量的动态数组:
myArray2 int[];
maxSize 属性设置数组可以包含的最多元素个数。以下代码创建在创建时具有 3 个元素但最大大小为 10 个元素的数组。
myArray3 int[3] {maxSize = 10};
结构字段数组是作为记录部件中的字段的数组。以下代码定义包含人员名字以及存放该人员名字的三个地址的数组的记录部件:
record myPerson3Address type basicRecord 10 name; 20 firstName char(20); 20 lastName char(20); 10 address[3]; 20 street char(30); 20 city char(20); 20 state char(20); 20 postalCode char(20); end
多维数组是一组数组。EGL 支持最多 7 维的数组。例如,以下代码创建了包含 5 个数组、每个数组有 3 个元素的数组:
myArray4 int[5][3];
要使用数组中的数据,必须指定要使用数组中的哪个元素。例如,以下代码创建了一个数组并给它的元素赋值,一次给一个元素赋值:
myArray5 int[3]; myArray5[1] = 6; myArray5[2] = 7; myArray5[3] = 7;
还可以同时给数组中的每个元素赋值:
myArray6 int[3]; myArray6 = [6,7,8];
使用记录中的结构化字段的方式与使用普通的记录相似:
myPerson myPerson3Address myPerson.name.firstName = "Steve"; myPerson.name.lastName = "Smith": myPerson.address[1].city = "New York"; myPerson.address[2].city = "Los Angeles"; myPerson.address[3].city = "Atlanta";
在此练习中,将创建一个页面,它计算包含数字的数组中元素的最小值、最大值和平均值。此页面的 PageHandler 使用 for 循环来按顺序访问数组中的每个元素。循环在此教程的后面部分讨论。
ArrayTest
package pagehandlers; PageHandler ArrayTest {view="ArrayTest.jsp", onPageLoadFunction=onPageLoad} //Variables myNumbers decimal(7,2)[8]; maximum decimal(7,2) {value=0}; minimum decimal(7,2) {value=0}; average decimal(7,2) {value=0}; //Function definitions Function onPageLoad() //Assign values to the array myNumbers[1] = 25.68; myNumbers[2] = 50.82; myNumbers[3] = 62.35; myNumbers[4] = 19.32; myNumbers[5] = 12.46; myNumbers[6] = 33.65; myNumbers[7] = 41.35; myNumbers[8] = 22.13; End Function calculateStatistics() //set the minimum and maximum values to the starting values minimum = myNumbers[1]; maximum = myNumbers[1]; //create a temporary variable to hold the sum of the numbers sum decimal(7,2); sum = 0; //create a counter variable to track //which element of the array is being used counter int = 1; //loop for each element in the myNumbers array for (counter from 1 to size(myNumbers) by 1) //check if the current number //is larger than the previous maximum if (maximum < myNumbers[counter]) maximum = myNumbers[counter]; end //check if the current number //is larger than the previous minimum if (minimum > myNumbers[counter]) minimum = myNumbers[counter]; end //add the current number to the running total sum = sum + myNumbers[counter]; //move to the next element in the array end //calculate the average of the numbers average = sum / size(myNumbers); end end
以下是一些有关刚才插入的代码的技术说明:
由于这一部分数据是数组,所以在页面上用数据表来表示它。与一般的 HTML 表不同,数据表在运行时调整大小以容纳下可变长度的内容,使得它们适用于数组。
该页面看起来应如下所示:
现在,您可以开始进行练习 1.6:条件语句了。