java 课件 第四章 中文版_第1页
java 课件 第四章 中文版_第2页
java 课件 第四章 中文版_第3页
java 课件 第四章 中文版_第4页
java 课件 第四章 中文版_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Chapter4:array(数组)Theconceptofarrays(数组概念)Todeclare,constructandinitializeanarray(申明、构建和初始化)ToExploretheconstructionandinitialization(探究构造和初始化)Toaccessarrayelements(存取数组元素)与for-eachloops(for-each循环)Toapplyjava.util.Randomclasses(Random类)The

java.util.ArraysclassandCommonarrayoperationsThecommandlineparametor(命令行参数)Tocopyarray(拷贝数组)Topassarraysasmethodparameter(数组作为参数)课本中一维数组主要例证讲解Java的数组-declaration数组用来一次定义相同类型的多个变量,占用内存中的连续空间。数组也是一个对象,可以有属性(如:length属性指示数组长度),但没有方法。申明数组的方式有两种:int[]a;或inta[];二者均可,但推荐前者!数组长度在声明时可以给,也可不给。如:int[100]a;//申明一个包含100个元素的元素类型为整型的数组甚至int[0]a;亦可,即可以申明长度为零的数组。数组声明仅定义了一个数组变量(数组对象的引用),此时还不会给数组分配空间,构造该对象时才会分配空间。不能通过a++等操作访问数组的下一个元素。数组显式构造隐式初始化:

explicitconstructionandimplicitinitialization显式构造:使用new操作符。如double[]d=newdouble[10]构造后,基本类型的数组没有初始化则系统也会赋值为相应类型的默认值int:0,Long:0L,float:0.0f,double:0.0char:‘\u0000’,boolean:false构造后,对象类型的数组没有初始化则系统默认会赋值为null为使用实际值初始化,该法需分步骤进行。Int[]b=newint[10];for(inti=0;i<b.length;i++){b[i]=(int)(10*Math.random()+1);}Strangleusage!publicclassT4ImplicitInitialization{publicstaticvoidmain(String[]args){int[]a=newint[3];double[]b=newdouble[a.length];String[]c=newString[a.length];boolean[]d=newboolean[a.length];

for(inti=0;i<a.length;i++){System.out.printf("%d,%f,%s,%b\n",a[i],b[i],c[i],d[i]);}}}在定义数组a时就分配空间并初始化int[]a={3,7,54,24,98,1,0,5};数组隐式构造显式初始化:implicitconstructionandexplicitinitialization使用new生成匿名数组并初始化,然后将引用赋予数组变量。int[]b=newint[]{4,6,8,32};第二个[]中间必须为空,后面才能用{}来初始化。数组显式构造显式初始化:explicitconstructionandexplicitinitializationpublicclassT4ExplicitInitialization{publicstaticvoidmain(String[]args){int[]a=newint[]{1,2,3};//[]内必须空int[]b={4,5,6};//不能分开

int[]c=newint[3];//创建数组、默认初始化for(inti=0;i<c.length;i++){c[i]=(int)(10*Math.random()+1);}

for(inti=0;i<3;i++){System.out.printf("%d,%d,%d\n",a[i],b[i],c[i]);}}}Exploretheconstructionandinitialization

(探究构造和初始化)publicclassT4ExploreConstruction{publicstaticvoidmain(String[]args){int[]a=newint[]{2,4,6};int[]b={1,3,5};int[]c=newint[3];

for(inti=0;i<a.length;++i){System.out.println(a[i]+""+b[i]+""+c[i]);}}}反编译结果Toaccessarrayelements(存取数组元素)与for-eachloops(for-each循环)访问数组元素:数组名[下标]J2SE1.5提供的foreach循环允许以更简单地方式来遍历数组和Collection等类型的对象。for(循环变量类型循环变量名称:要被遍历的对象){循环体}例如:int[]integers={1,2,3,4};for(intvar:integers){System.out.println(var);});//依次输出元素1234注意:循环变量的类型要和被遍历的数组中元素的类型相同/兼容(int去遍历byte)仅单元素、前向、一维、取用publicclassT4ForEach{publicstaticvoidmain(String[]args){String[]s=newString[]{"spring","summer","autumn","wintter"};

for(Stringseason:s){System.out.println("theseasonisnow"+season);season="tt";}System.out.println(java.util.Arrays.toString(s));}}编译无问题,但修改不了数组元素java.util.ArraysclassandCommonoperations

此类包含用来操作数组的多种方法:sort(

)方法对数组进行排序(默认升序)。有两种形式(局部/整体)。fill(

)方法用一个指定的值填充数组。有两种形式(局部/整体)。binarySearch(

)方法使用二进制搜索寻找指定的值。仅应用于排序数组。返回的是int型索引值。equals(

)方法比较两个数组是否相等。返回boolean型值。copyOf():拷贝数组参数或者说数组类型可以是各种基本类型或object对象类型.方法均为静态。无需生成Arrays实例。

importjava.util.Arrays;publicclassT4ArraysClass{publicstaticvoidmain(String[]args){int[]a=newint[]{1,3,2,9,4,7,5,0,8,6};int[]b=Arrays.copyOf(a,a.length);

System.out.println("\nTheoriginalarrayais:");outArray(a);System.out.println("\naftersorting,arrayabecomes:");Arrays.sort(a);outArray(a);System.out.println("\nbutthecopyofarrayaisstill:");outArray(b);System.out.println("\nusingtoString()toprinta:\n"+Arrays.toString(a));}privatestaticvoidoutArray(int[]a){for(inti=0;i<a.length;i++){System.out.print(a[i]+"");}}}Tocopyarray拷贝数组四种方法:使用循环使用System.out.arraycopy方法使用Arrays.copyOf方法使用clone方法importjava.util.Arrays;publicclassT4CopyArray{publicstaticvoidmain(String[]args){int[]a={1,2,3,4,5};int[]b=Arrays.copyOf(a,10);int[]c=Arrays.copyOf(a,a.length);

System.out.println(Arrays.toString(a));System.out.println(Arrays.toString(b));System.out.println(Arrays.toString(c));}}对其他类型数组,不足时Array.copyOf会如何初始化多余元素?importjava.util.Arrays;publicclassT4CopyCharByteArray{publicstaticvoidmain(String[]args){char[]a0={'1','2','3','4','5'};char[]b0=Arrays.copyOf(a0,10);char[]c0=Arrays.copyOf(a0,a0.length);System.out.println(Arrays.toString(a0));System.out.println(Arrays.toString(b0));System.out.println(Arrays.toString(c0));

byte[]a1={1,2,3,4,5};byte[]b1=Arrays.copyOf(a1,10);byte[]c1=Arrays.copyOf(a1,a1.length);System.out.println(Arrays.toString(a1));System.out.println(Arrays.toString(b1));System.out.println(Arrays.toString(c1));

double[]a2={1.0,2.0,3.0,4.0,5.0};double[]b2=Arrays.copyOf(a2,10);double[]c2=Arrays.copyOf(a2,a2.length);System.out.println(Arrays.toString(a2));System.out.println(Arrays.toString(b2));System.out.println(Arrays.toString(c2));}}Random类Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double。java.util.Random的对象可以产生随机int、随机float、随机double,随机long,java.util.Random类有两种方式构建方式:带种子和不带种子不带种子:每次运行结果不一样带种子:无论程序运行多少次,返回结果都是一样的

importjava.util.Random;importjava.util.Arrays;publicclassT4RandomClass{publicstaticvoidmain(String[]args){int[]a=newint[10];double[]d=newdouble[10];

initIntArray(a);initDoubleArray(d);System.out.println(Arrays.toString(a));System.out.println(Arrays.toString(d));}privatestaticvoidinitIntArray(int[]a){Randomr=newRandom();for(inti=0;i<a.length;i++){a[i]=r.nextInt(100);//取均匀分布于0-100之间的整数值}}privatestaticvoidinitDoubleArray(double[]a){Randomr=newRandom();for(inti=0;i<a.length;i++){a[i]=r.nextDouble();//取分布于0.0-1.0之间的符点数}}}importjava.util.Scanner;importjava.util.Arrays;publicclassT4LettersAndDigits{publicstaticvoidmain(String[]args){int[]digits=newint[10];int[]chars=newint[26];Scannersc=newScanner(System.in);Strings=sc.nextLine();

for(inti=0;i<s.length();i++){charc=s.charAt(i);if((c>='0')&&(c<='9')){digits[c-'0']++;//digits[c]++?}elseif((c>='a')&&(c<='z')){chars[c-'a']++;}elseif((c>='A')&&(c<='Z')){chars[c-'A']++;}}System.out.println(Arrays.toString(digits));System.out.println(Arrays.toString(chars));}}成绩分段统计如何散列实现?(5分一段/10分一段)不区分大小写如何实现上述统计?一组射击数据(xi,yi){i:1..n}如何计算射手的特点?TheCommandlineparametor命令行参数:publicclassT4CommandLinePara{publicstaticvoidmain(String[]args){if(args.length!=0){for(inti=0;i<args.length;i++){System.out.println(args[i]);}}else{System.out.println("noparameterispassed");}}}Java命令行数组不包含程序名。Topassarraysasmethodparameter(数组作为参数)输入参数,输出参数,或既作为输入又作为输出可以作为方法结果返回。例:publicclassT4Cards{publicstaticvoidmain(String[]args){int[]deck=newint[52];//每13个元素一组String[]suits={"Hearts","Spades","Clubs","Diamonds"};String[]out;

initCards(deck);shuffleCards(deck);out=generateResults(deck,suits);printResults(out);}

publicstaticvoidinitCards(int[]a){ for(inti=0;i<a.length;i++){a[i]=i;} }publicstaticvoidshuffleCards(int[]a){ for(inti=0;i<a.length;i++){ intindex=(int)(Math.random()*a.length); inttemp=a[index];a[index]=a[i];a[i]=temp;} }publicstaticString[]generateResults(int[]a,String[]b){ String[]c=newString[a.length]; for(inti=0;i<a.length;i++){ Stringsuit=b[a[i]/13]; intrank=a[i]%13; c[i]=suit+""+rank; } returnc;}

publicstaticvoidprintResults(String[]b){System.out.println("Aftershuffling:"); for(inti=0;i<b.length;i++){ System.out.println("cardnumber"+i+":"+b[i]);}}}数组作为输入和输出例:(局部修改上例)publicclassT4Cards01{publicstaticvoidmain(String[]args){ finalintCARDS_NUMBER=52;

int[]deck=newint[CARDS_NUMBER];//每13个元素一组String[]suits={"Hearts","Spades","Clubs","Diamonds"};String[]out=newString[CARDS_NUMBER];

initCards(deck);shuffleCards(deck);generateResults(deck,suits,out);printResults(out);……publicstaticvoidgenerateResults(int[]a,String[]b,String[]c){ for(inti=0;i<a.length;i++){ Stringsuit=b[a[i]/13]; intrank=a[i]%13; c[i]=suit+""+rank; }}…….应用例证:成绩分段统计publicclassT4SegCounting{publicstaticvoidmain(String[]args){finalintGAP=5;

intnumbers=109;double[]scores;int[]segments;

scores=initScores(numbers);segments=counting(scores,GAP);outScores(scores);System.out.println("\n");outCounting(segments);}publicstaticdouble[]initScores(intnumbers){double[]scores=newdouble[numbers];for(inti=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论