JavaJava语言程序设计语言程序设计JavaJava语言程序设计语言程序设计杨巍yangwei@mail.neu.edu.cnJavaJava语言程序设计语言程序设计JavaJava编程基础编程基础——数组杨巍yangwei@mail.neu.edu.cnJavaJava编程基础编程基础3数组的定义及使用数组具有同一数据类型的对象的集合一维数组,二维数组,多维数组一组相关的存储单元要使用Java数组,必须经过声明数组和分配内存给数组两个步骤访问数组元素,要访问它的下标JavaJava编程基础编程基础4一维数组一维数组的声明一维数组分配内存数据类型数组名[]=null;数据类型[]数组名=null;数组名=new数据类型[长度];JavaJava编程基础编程基础5一维数组一维数组声明的同时分配内存数据类型数组名[]=new数据类型[长度];inta[]=newint[4];inta[]=null;a=newint[4];JavaJava编程基础编程基础6一维数组null引用数据类型的默认值表示暂时没有任何指向的内存空间inta[]=newint[4];inta[]=null;a=newint[4]a0000JavaJava编程基础编程基础7一维数组数组中元素的表示方法要访问数组中的元素,可以利用索引来访问索引编号由0开始数组名[下标]inta[]=newint[4];inta[]=null;a=newint[4]aa[0]=0a[1]=0a[2]=0a[3]=0JavaJava编程基础编程基础8一维数组//ArrayDemo01.javapublicclassArrayDemo01{publicstaticvoidmain(String[]args){inta[]=newint[4];System.out.println(a[0]=+a[0]);System.out.println(a[1]=+a[1]);System.out.println(a[2]=+a[2]);System.out.println(a[3]=+a[3]);}}JavaJava编程基础编程基础9数组的初始化编译器也能确保这种数组的初始化,因为它会将这种数组所占的内存赋默认值整型:0浮点类型:0.0字符类型:'\u0000'布尔类型:falseJavaJava编程基础编程基础10一维数组使用new声明数组必须另外进行初始化//ArrayDemo02.javapublicclassArrayDemo02{publicstaticvoidmain(String[]args){inta[]=newint[4];for(inti=0;i4;i++){a[i]=i*2+1;}for(inti=0;i4;i++){System.out.println(a[+i+]=+a[i]);}}}JavaJava编程基础编程基础11一维数组获得数组的长度数组名.length返回一个int型数据//ArrayDemo03.javapublicclassArrayDemo03{publicstaticvoidmain(String[]args){inta[]=newint[4];System.out.println(数组长度+a.length);}}JavaJava编程基础编程基础12一维数组静态初始化声明数组时就给数组赋初值初始化时不必指出数组的大小,数组的大小将根据所给数组成员的数量决定数据类型数组名[]={初值0,初值1,…,初值n};inta[]={1,2,3};JavaJava编程基础编程基础13二维数组二维数组以数组为元素的数组——表格数据类型数组名[][];数组名=new数据类型[行的个数][列的个数];JavaJava编程基础编程基础14二维数组Java中多维数组的初始化应按照从高维到低维的顺序进行inta[][]=newint[3][];a[0]=newint[2];a[1]=newint[3];a[2]=newint[4];intb[][]=newint[][4];//非法JavaJava编程基础编程基础15二维数组二维数组的静态初始化数据类型数组名[][]={{第0行初值},{第1行初值},…{第n行初值}};JavaJava编程基础编程基础16二维数组//TwoArray.javapublicclassTwoArray{publicstaticvoidmain(String[]args){intscore[][]={{67,61},{78,89,93},{99,100,98,66,95}};for(inti=0;iscore.length;i++){for(intj=0;jscore[i].length;j++){System.out.print(score[i][j]+\t);}System.out.println();}}}JavaJava编程基础编程基础17foreach输出foreach语句数组的输出一般都会使用for循环在JDK1.5后,introducedanenhancedforloopforiteratingoverarraysfor(数据类型变量名称:数组名称){…};//ForEachDemo1.javapublicclassForEachDemo1{publicstaticvoidmain(String[]args){intsa[]={67,61,8,89,93,99,100,98,66,95};for(inti=0;isa.length;i++){System.out.println(sa[i]);}}}//ForEachDemo2.javapublicclassForEachDemo2{publicstaticvoidmain(String[]args){intsa[]={67,61,8,89,93,99,100,98,66,95};for(inti:sa){System.out.println(i);}}}JavaJava语言程序设计语言程序设计JavaJava编程基础编程基础——方法杨巍yangwei@mail.neu.edu.cnJavaJava编程基础编程基础20方法(函数)方法(函数)一段可重复调用的代码段——反复调用直接使用主方法main()调用的方法方法定义,不能写在main()中,方法是不能嵌套的publicstatic返回值类型方法名称(类型参数1,类型参数2,….){程序语句;[return表达式];}JavaJava编程基础编程基础21方法(函数)方法定义方法命名规范要求第一个单词的首字母小写,之后每个单词的首字母大写参数问题如果不需要传递参数到方法中,只要将括号写出返回值问题方法没有返回值,则在返回值类型处要明确写出voidJavaJava编程基础编程基础22方法方法定义return语句方法中return语句可以省略遇到return语句,方法结束执行,后续语句不执行方法执行完后,返回到方法的调用处并向下继续执行//MethodDemo1.javapublicclassMethodDemo1{publicstaticvoidprintInfo(){charc[]={'h','e','l','l','o'};for(inti=0;ic.length;i++){System.out.print(c[i]);}System.out.println();}publicstaticvoidmain(String[]args){printInfo();printInfo();printInfo();}}//CallByValue.javapublicclassCallByValue{publicstaticvoidhalf(intn){n=n/2;System.out.println(n=+n);}publicstaticvoidmain(String[]args){intm=50;System.out.println(调用half前m=+m);half(m);System.out.println(调用half后m=+m);}}形式参数实际参数JavaJava编程基础编程基础25方法参数传递传值调用传递基本数据类型mnm=5n=5//CallByRef.javapublicclassCallByRef{publicstaticvoidshow(intb[]){for(intx:b){System.out.print(x+);}System.out.println();}publicstaticvoidpassArray(intc[]){for(inti=0;ic.length;i++)c[i]=c[i]*2;}publicstaticvoidmain(String[]args){inta[]={1,2,3};System.out.println(调用前:);show(a);passArray(a);System.out.println(调用后:);show(a);}}JavaJava编程基础编程基础27方法参数传递传地址调用传递引用数据类型数组属于引用数据类型aa[0]=1a[1]=2a[2]=3c//MethodDemo2.javapublicclassMethodDemo2{publicstaticintaddOne(intx,inty){inttemp=0;temp=x+y;returntemp;}publicstaticvoidmain(String[]args){intone=addOne(10,20);inttwo=addOne(10.3f,13.3f);System.out.println(addOne的计算结果+one);}}publicclassMethodDemo3{publicstaticintaddOne(intx,inty){inttemp=0;temp=x+y;returntemp;}publicstaticfloataddTwo(floatx,floaty){floattemp=0;temp=x+y;returntemp;}publicstaticvoidmain(String[]args){intone=addOne(10,20);floattwo=addTwo(10.3f,13.3f);System.out.println(addOne的计算结果+one);System.out.println(addTwo的计算结果+two);}}JavaJava编程基础编程基础30方法的重载overload方法重载多个方法名称相同方法的参数个数不同,或参数类型不同在调用方法时,会根据参数的类型和个数自动的进行区分JavaJava编程基础编程基础31publicclassMethodDemo4{publicstaticintaddOne(intx,inty){inttemp=0;temp=x+y;returntemp;}publicstaticfloataddOne(floatx,floaty){floattemp=0;temp=x+y;returntemp;}publicstaticvoidmain(String[]args){intone=addOne(10,20);floattwo=addOne(10.3f,13.3f);System.out.println(addOne的计算结果+one);System.out.println(addOne的计算结果+two);}}JavaJava编程基础编程基础32方法的重载overload判断下列是否为方法重载publicstaticintaddOne(intx,inty){inttemp=0;temp=x+y;returntemp;}publicstaticfloataddOne(intx,inty){floa