
实验2.5 数组的使用.doc
19页实验 2.5 数组的使用2.5.1 实验目的(1)掌握一维数组、二维数组的定义存储分配方法;(2)了解如何给数组赋初值;(3)熟悉利用循环实现数组的赋值、输出以及处理编程方法4)了解命令行参数数组的使用(5)熟悉数组方法参数传递的特点2.5.2 知识要点1 数组的定义与分配空间(1)定义数组方括号的位置可在数组名前,也可在后int a[];等价于 int [] a;(2)给数组分配空间的办法:办法 1:通过 new 运算符,例:a=new int[10];办法 2:给数组赋初值将自动给数组分配空间;例:int b[]={1,2,3,4,5,3,4,6,7,3};Java 规定一维数组的第 1 个元素的下标为 03)关于数组的默认初值问题基本类型数组元素中存放的是数据本身,而引用类型的数组元素中存放的是对象的引用,基本类型上数组在分配空间后,不论数组在什么位置定义,均按基本类型变量的默认值规定赋初值,而引用类型数组在分配空间后默认初值为 null4)二维数组可看作是数组的数组,每个元素包括行列位置5)数组的大小用 length 属性可求得,一维数组元素的最大下标为其 length-12 数组的访问(1)用一重循环可遍历访问一维数组的所有元素。
例如,以下语句给数组 a 的所有元素赋值为 0for (int k=0;ka[pos][pos]) pos=k;}System.out.println("主对角线最大元为 a["+p+"]["+p+"]="+a[p][p]);}}【编程技巧】(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) 注: 从前往后查,返回在数组中第一次出现位置,如果未查到,则返回-1利用随机函数产生 20 个整数给一个数组赋值,分别验证以上方法 【参考程序】import java.io.*;public class test {/* 求数组的最大元素值 */public static int maxElement(int a[]) {int m=a[0];for ( int k=1;ka[j+1]) { //相邻两两比较,大的往后冒/* 交换 a[j]和 a[j+1] */ int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } }【编程技巧】(1) 如何表达两两比较。
2) 外循环控制要多少趟,内循环控制每趟的比较与交换3) 每趟比较的始点和终点的确定,尤其是终点的变化规律2.5.4 上机练习 基本题1)利用随机函数产生 20 个学生的英语成绩存入一个数组中 输出数组所有元素,每行输出 3 个数; 求最高分、最低分; 求平均成绩public class Test{public static void main(String[] args){int a[]=new int [20];int j=0;for (int k=0;ka[k])min=a[k];return min;}public static double average(int a[]){int s=0;int t=a.length;for(int k=0;ka[pos][pos]) pos=k;}System.out.println("主对角线上最大元素是:"+a[pos][pos]);for(int i=0;i max){max = a[i][j];maxI = i;maxJ = j;}}}System.out.println("数组的最大值:" + max);System.out.println("位置:(" + maxI + ", " + maxJ + ")");reverse(a, b);System.out.println("转置矩阵:" );for(i=0; ia[j+1]) { int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }} }运行结果为6 7 9 12 13 14 19 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 int[6][6];for(int i = 0;imax){max=a[i][j];flag = j;}}for(int k=0;ka[middle]){start=middle; }else if(na.length/2)break;}if(count>a.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 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(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)输入如下命令运行 Java 应用程序。
java MyTest "1 2 3"则命令行参数数组 args 中得到的值哪个正确?A. args[0] = "MyTest 1 2 3"B. args[0] = "1 2 3"C. args[0] = "1"D. args[1]= "1 2 3"2) 在注释//Start For loop 处要插入哪段代码可实现根据变量 i 的值定位数组 ia[]的元素?public class Lin{public void amethod(){int ia[] = new int[4];//Start For loop {ia[i]=i;System.out.println(ia[i]);}}}A. for (int 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 int[5];System.out.println(anar[0]);}} A. 编译错误:anar 在引用前未初始化。
B. nullC. 0D. 54) 下列创建二维整型数组正确语句是:A. int a[][] = new int [10,10];B. int a[10][10] = new int [][];C. int a[][] = new int [10][10];D. int []a[] = new int [10][10];5) 给出下面代码: public class Person{ static int arr[] = new int[10];public static void main(String a[]) { System.out.println(arr[1]); } } 以下那个说法正确? A. 编译时将产生错误; B. 编译时正确,运行时将产生错误; C. 输出 0; D. 输出 null 6)设有如下说明: char[] c = new char[100]; 则,c[50]的值为?A. 50B. '\u0000'C. " "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++)seeds[k]= seeds[k+1]; for (int i = 0; i






![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)





