1、实验 2.5 数组的使用2.5.1 实验目的(1)掌握一维数组、二维数组的定义存储分配方法;(2)了解如何给数组赋初值;(3)熟悉利用循环实现数组的赋值、输出以及处理编程方法。(4)了解命令行参数数组的使用(5)熟悉数组方法参数传递的特点。2.5.2 知识要点1 数组的定义与分配空间(1)定义数组方括号的位置可在数组名前,也可在后。int a;等价于 int a;(2)给数组分配空间的办法:办法 1:通过 new 运算符,例:a=new int10;办法 2:给数组赋初值将自动给数组分配空间;例:int b=1,2,3,4,5,3,4,6,7,3;Java 规定一维数组的第 1 个元素的下标为
2、 0。(3)关于数组的默认初值问题基本类型数组元素中存放的是数据本身,而引用类型的数组元素中存放的是对象的引用,基本类型上数组在分配空间后,不论数组在什么位置定义,均按基本类型变量的默认值规定赋初值,而引用类型数组在分配空间后默认初值为 null。(4)二维数组可看作是数组的数组,每个元素包括行列位置。(5)数组的大小用 length 属性可求得,一维数组元素的最大下标为其 length-1。2 数组的访问(1)用一重循环可遍历访问一维数组的所有元素。例如,以下语句给数组 a 的所有元素赋值为 0。for (int k=0;kapospos) pos=k;System.out.println(
3、“主对角线最大元为 a“+p+“+p+“=“+app);【编程技巧】(1) 用二重循环访问二维数组的元素,外循环控制行变化,内循环控制列变化;(2) 如何最外一圈元素的特征,从而找出所有最外一圈元素。(3) 主对角线上元素行、列值相等,所以可用一重循环遍历元素。样例 2 就一维数组问题编写如下方法:1) 求一个数组的最大元素值:public static int maxe(int a) 2) 求一个数组的所有元素的平均值:public static int average(int a)3) 查找某个数在数组中的位置:public static int search(int a,int k) 注
4、: 从前往后查,返回在数组中第一次出现位置,如果未查到,则返回-1。利用随机函数产生 20 个整数给一个数组赋值,分别验证以上方法。 【参考程序】import java.io.*;public class test /* 求数组的最大元素值 */public static int maxElement(int a) int m=a0;for ( int k=1;kaj+1) /相邻两两比较,大的往后冒/* 交换 aj和 aj+1 */ int temp=aj; aj=aj+1; aj+1=temp; 【编程技巧】(1) 如何表达两两比较。(2) 外循环控制要多少趟,内循环控制每趟的比较与交换。
5、(3) 每趟比较的始点和终点的确定,尤其是终点的变化规律。2.5.4 上机练习 基本题1)利用随机函数产生 20 个学生的英语成绩存入一个数组中。 输出数组所有元素,每行输出 3 个数; 求最高分、最低分; 求平均成绩。public class Testpublic static void main(String args)int a=new int 20;int j=0;for (int k=0;kak)min=ak;return min;public static double average(int a)int s=0;int t=a.length;for(int k=0;kapospo
6、s) pos=k;System.out.println(“主对角线上最大元素是:“+apospos);for(int i=0;i max)max = aij;maxI = i;maxJ = j;System.out.println(“数组的最大值:“ + max);System.out.println(“位置:(“ + maxI + “, “ + maxJ + “)“);reverse(a, b);System.out.println(“转置矩阵:“ );for(i=0; iaj+1) int temp=aj; aj=aj+1; aj+1=temp; 运行结果为6 7 9 12 13 14 1
7、9 23 26 27 28 29 30 31 32 33 35 37 44 47average=25【提示】每产生一个整数要跟前面已产生的数进行比较,如果已存在,则不算,要重新产生,可以用一个循环来控制产生一个新数,只有产生的数未出现过,才能出循环。2) 利用随机函数产生 36 个随机整数给一个 6*6 的二维数组赋值。求出所有鞍点,鞍点的条件是该元素在所在行是最大值,在所在列是最小值。import java.util.Random;public class Test public static void main(String args)int a = new int66;for(int i
8、 = 0;imax)max=aij;flag = j;for(int k=0;kamiddle)start=middle; else if(na.length/2)break;if(counta.length/2)System.out.println(n+“不在数组中“ );elseSystem.out.println(n+“是数组中的第“ +middle+“个元素“ );运行结果:输入一个整数:1919是数组中的第3个元素4) 构造一个 n 阶方阵,方阵的大小从键盘输入,方阵的最外一圈元素为 1,以后往内依次为 2,3,n。 例如:1 1 1 1 11 2 2 2 11 2 3 2 11 2
9、 2 2 11 1 1 1 1import java.util.Scanner;public class Test public static void main(String args) Scanner in = new Scanner(System.in); System.out.print(“please input n:“); int n = in.nextInt();showResult(n);private static int findMinValue(int a,int b,int c,int d)return Math.min(Math.min(a, b),Math.min(
10、c, d);private static void showResult(int n)for (int i = 1; i n+1; i+) for (int j = 1; j n+1; j+) System.out.print(findMinValue(i,j,Math.abs(n-i)+1,Math.abs(n-j)+1);System.out.print(“t“);System.out.println();please input n:61 1 1 1 1 11 2 2 2 2 11 2 3 3 2 11 2 3 3 2 11 2 2 2 2 11 1 1 1 1 12.5.5 思考题1)
11、输入如下命令运行 Java 应用程序。java MyTest “1 2 3“则命令行参数数组 args 中得到的值哪个正确?A. args0 = “MyTest 1 2 3“B. args0 = “1 2 3“C. args0 = “1“D. args1= “1 2 3“2) 在注释/Start For loop 处要插入哪段代码可实现根据变量 i 的值定位数组 ia的元素?public class Linpublic void amethod()int ia = new int4;/Start For loop iai=i;System.out.println(iai);A. for (in
12、t i=0; i ia.length() -1; i+) B. for (int i=0; i ia.length(); i+) C. for (int i=1; i 4; i+) D. for (int i=0; i ia.length;i+)3)以下代码的调试结果?public class Q public static void main(String argv) int anar= new int5;System.out.println(anar0); A. 编译错误:anar 在引用前未初始化。B. nullC. 0D. 54) 下列创建二维整型数组正确语句是:A. int a =
13、new int 10,10;B. int a1010 = new int ;C. int a = new int 1010;D. int a = new int 1010;5) 给出下面代码: public class Person static int arr = new int10;public static void main(String a) System.out.println(arr1); 以下那个说法正确? A. 编译时将产生错误; B. 编译时正确,运行时将产生错误; C. 输出 0; D. 输出 null。 6)设有如下说明: char c = new char100; 则
14、,c50的值为?A. 50B. u0000C. “ “D. 不定E. 为 null,直到被赋值。7) 设有如下程序,其调试结果为:class Q2 public static void main(String args) int seeds = 1,2,3,4,6,8; int n= seeds.length;for (int i = 0; i 3; i+) for (int k = 0; k n-1; k+)seedsk= seedsk+1; for (int i = 0; i n-1; i+) System.out.print(“t“+seedsi); A输出: 1 2 3 4 6B输出: 4 6 8 8 8 C输出: 2 3 4 6 8 D输出: 2 3 4 6