版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数组、字符串和实用类数组字符串类数组类和向量类Java语言基础类库
实例学习课程内容二三四五一项目学做六一、数组
一、数组数组就是一组命名变量,其中的每个变量被称之为数组元素。根据下标个数的多少分类:
·数组是有序数据的集合·数组是一种最简单的复合数据类型·数组中的每个元素具有相同的数据类型数组中的元素可以用一个统一的数组名和下标来唯一地确定定义·一维数组·多维数组1、一维数组只有一个下标的数组称为一维数组。在使用数组之前必须要初始化一维数组的声明说明数组变量的名称和数组元素的数据类型。声明格式:datatypearrayName[];或datatype[]arrayName;其中datatype可以为Java中任意的数据类型,包括简单类型和复合类型。arrayName为数组的名字,命名符合标识符的规定。如:int[]mathScore;为数组分配内存空间,并为每个数组元素赋初始值。
1、一维数组定义数组的大小(申请内存空间)数组初始化·静态初始化:在声明和定义数组的同时,给数组元素赋初值。·动态初始化:先声明和定义数组,然后再赋值。
·简单类型·复合类型格式:arrayName=newdatatype[numberOfArrayElement];其中,numberOfArrayElement表示数组元素的个数,即数组的长度或大小,是整型表达式。例如:在上面对mathScore声明之后,就可以定义其大小。mathScore=newint[10];//定义数组的10个元素
1、一维数组一维数组的重定义一维数组的长度(length属性)一维数组元素的引用其实数组是作为对象来处理的,所有的数组对象都有length(长度)属性,用来记录数组中元素的个数。所谓重定义也称重用,即是在程序中可以改变数组的大小(重新定义数组)。数组元素的引用方式为:arrayName[index]index为数组下标,它可以为整型常数或表达式,下标从0开始到arrayName.length-1。·例6-1:将多个学生某门课程的成绩放到一个数组中,然后计算学生的平均成绩。(6-1.txt)1、一维数组例6-1:将多个学生某门课程的成绩放到一个数组中,然后计算学生的平均成绩。(6-1.txt)/***这是一个利用数组存放学生成绩,统计学生平均成绩的示例程序
*程序的名字是:AverageScore.java*/publicclassAverageScore{ publicstaticvoidmain(String[]args) { int[]score={72,89,65,58,87,91,53,82,71,93,76,68};//声明定义初始化 floataverage=0.0f;//部分和,最后存放平均值 for(inti=0;i<score.length;i++){ average+=score[i];//成绩累加和(部分和)}average/=score.length;//求平均System.out.println("average="+average); }}
1、一维数组foreach循环使用foreach循环遍历数组时,无须获得数组和集合长度,无须根据索引来访问数组元素和集合元素,foreach循环会自动遍历数组。格式:for(typevariableName:array|collection){ //variableName
自动迭代访问每个元素}
应为variableName·例6-2:使用foreach循环来遍历数组元素。(6-2.txt)1、一维数组例6-2:使用foreach循环来遍历数组元素。(6-2.txt)publicclassForEachTest{ publicstaticvoidmain(String[]args) { String[]books={ "大学计算机基础", "Java程序设计", "操作系统"}; for(Stringbook:books) { System.out.println(book); } }}运行结果:大学计算机基础Java程序设计操作系统
2、二维数组带有两个下标的数组称为二维数组。声明初始化与一维数组类似,可以先声明后定义,也可将声明和定义合二为一。声明与定义格式:datatypearrayName[][];或:datatype[][]arrayName;或:arrayName=newdatatype[arrayLength1][arrayLength2];或:datatype[][]arrayName=newdatatype[arrayLength1][arrayLength2];·静态初始化·动态初始化
2、二维数组不同长度的二维数组二维数组元素的引用对二维数组中的每个元素,引用方式为:arrayName[index1][index2]例6-3:设有三个矩阵A、B、C,A和B矩阵相乘,结果放入C中,即
C=A×B。(6-3.txt)要求:A[l][m]×B[m][n]=C[l][n]计算公式:C[i][j]=∑a[i][k]*b[k][j]其中:
i=0~l,j=0~n,k=0~m在有些具体的应用中,每行元素的个数不是相等的,Java允许生成具有不同长度的多维数组。2、二维数组例6-3:设有三个矩阵A、B、C,A和B矩阵相乘,结果放入C中,即
C=A×B。(6-3.txt)publicclassA_multiply_B{publicstaticvoidmain(String[]args){ float[][]B={{1,2,3},{4,5,6},{7,8,9}};//声明定义初始化二维数组Bfloat[][]A={{1,2,3},{4,5,6}};//声明定义初始化二维数组Afloat[][]C=newfloat[2][3];//声明定义二维数组Cinti,j,k;for(i=0;i<2;i++)//控制C中的行数{for(j=0;j<3;j++)//控制C中的列数{for(k=0;k<3;k++)C[i][j]+=A[i][k]*B[k][j];//计算C中的每个元素System.out.print(C[i][j]+"");}System.out.println("\n");}}}二、字符串类
二、字符串类1、String类在Java语言中,字符是一基本的数据类型,而字符串是抽象的数据类型,只能使用对象表示字符串。定义字符串类String用于创建字符串对象,并且创建的字符串(对象)不能被改变,也就是说字符串对象中的字符是不能修改的(如在一个字符串对象中添加字符、删除字符、修改字符等),称为字符串常量。·(1)String类的构造函数String()
String(Stringvalue)
String(char[]value)1、String类例6-4:使用字符数组,创建一个字符串对象,并显示字符串对象中的字符串。(6-4.txt)classArray_string{ publicstaticvoidmain(Stringargs[]) {//声明定义初始化字符数组 charc[]={'J','a','v','a','','i','s','','O','O','P'}; Strings1=newString(c);//创建字符串对象 Strings2=newString(s1);// System.out.println(s1);//打印 System.out.println(s2); }}
二、字符串类·(2)字符串的操作对字符串处理时,可使用String类提供的几个常用方法(用于对字符串进行处理):charAt(intindex)获取指定位置的字符;length()求字符串长度;concat(Stringstr)连接两个字符串;copyValueOf(char[]value)字符数组转换成字符串;replace(charch1,charch2)字符串中的字符ch1用ch2替换;…还有其他很多处理字符串的方法。
二、字符串类例6-5:比较字符串(6-5.txt)将截取的子字符串放到字符数组中时,可使用方法voidgetChars(intstartIndex,intendIndex,chartarget[],inttargetStart),从startIndex到endIndex的字符在字符数组target从targetStart起存放,应保证能够容纳下。例6-6:截取字符串(6-6.txt)1、String类例6-5:比较字符串(6-5.txt)classEquals{ publicstaticvoidmain(Stringargs[]) { Strings1="Hello"; Strings2="Hello"; Strings3="Good-bye"; Strings4="HELLO"; System.out.println(s1+"equals"+s2+":"+s1.equals(s2));//trueSystem.out.println(s1+"equals"+s3+":"+s1.equals(s3));//false System.out.println(s1+"equals"+s4+":"+s1.equals(s4));//false System.out.println(s1+"equalsIgnoreCase"+s4+":"+s1.equalsIgnoreCase(s4));//true,忽略大小写 System.out.println(s1+"=="+s2+":"+(s1==s2));//false,==为对象比较, }//s1与s2不是一个对象,所以2不相等。}1、String类例6-6:截取字符串(6-6.txt)classgetChars{publicstaticvoidmain(Stringargs[]){Strings="ThisisagetCharsmethod.";intstart=10;//第一个字符的位置(索引)为0,10代表第11个字符位置intend=18;//第19个字符位置charbuf[]=newchar[end-start];s.getChars(start,end,buf,0);System.out.println(buf);}}运行结果:getChars
二、字符串类2、
StringBuffer类当需要改变字符串的值时,可使用StringBuffer类,它提供了对字符串内容进行动态修改的功能——动态添加,插入、替换等。(1)该类提供三个构造方法StringBuffer()StringBuffer(intlength)StringBuffer(Stringstr)*与String不同,应该使用StringBuffer的构造函数创建对象,不能定义StringBuffer类型的变量。如:StringBuffersb
=”ThisisStringBuffer”;是不允许的二、字符串类(2)对字符串的修改1)添加操作使用该类的append()方法,将一个字符串添加到一个字串缓冲区的后面。
2)插入操作使用的是StringBuffer类的insert(intoffset,representation)方法,用于在指定的位置插入给定的量。
二、字符串类3)删除delete(intstart,intend)方法用于删除从start~end之间的字符串;deleteCharAt(intindex)方法用于删除位置index处的字符。4)替换replace(intstart,intend,Stringstr)用字符串str替换start到end之间的字符串。例6-7:将“Javaprogramming!”中的子串“Java”替换成“ThisisTurboC”。(6-7.txt)StringBuffer类中的几个常用方法:toString()将字符串缓冲区转换为字符串;charAt(intindex)取指定位置的字符;getChars(intsrcBegin,intsrcEnd,char[]dst,intdstBegin)取指定位置的字符到字符数组dst中length()返回当前对内容的长度;capacity()返回总的容量;ensuareCapacity()设置容量不够时追加的容量大小;reverse()字符串翻转。例6-8:将给定的字符串翻转(6-8.TXT)2、
StringBuffer类例6-7:将“Javaprogramming!”中的子串“Java”替换成“ThisisTurboC”。(6-7.txt)classReplace{ publicstaticvoidmain(Stringargs[]) { StringBuffersb=newStringBuffer("Javaprogramming!"); sb.replace(0,4,"ThisisTurboC");//第一个字符位置为0 System.out.println("Afterreplace:"+sb.toString()); //也可使用下面的方法 //sb=sb.replace(0,4,"ThisisTurboC"); //System.out.println("Afterreplace:"+sb); }}运行结果:ThisisTurboCprogramming!2、
StringBuffer类例6-8:将给定的字符串翻转(6-8.TXT)classReverse{ publicstaticvoidmain(Stringargs[]) { StringBuffers=newStringBuffer("123456789"); System.out.println(s); s.reverse();//调用方法,生成逆序即翻转字符串 System.out.println(s); }}运行结果:987654321
二、字符串类3、
StringTokenizer类StringTokenizer(字符串令牌,字符串标记)类主要用于对字符串的分析,可将一个字符串分解成数个单元(Token—令牌,每个单元之间以分界符分隔)。StringTokenizer(Stringstr)是构造函数。几个常用方法:intcountTokens(),返回令牌的数目;booleanhasMoreTokens()检查是否还有令牌存在;StringnextToken()返回下一个令牌;StringnextToken(Stringdelimit)根据指定的分界符(delimit),返回令牌。3、
StringTokenizer类例6-9:将给定字符串每个单词取出来。(6-9.txt)importjava.util.StringTokenizer;classToken{ publicstaticvoidmain(String[]args) { StringTokenizerst=newStringTokenizer("IamaJavanewer"); String[]tokens=newString[st.countTokens()];//声明定义数组 for(inti=0;st.hasMoreTokens();i++)//每个数组元素存放一个单词 { tokens[i]=st.nextToken();//取词 System.out.println(tokens[i]);//打印 } }}运行结果:IamaJavanewer三、数组类和向量类
三、数组类和向量类
1、数组Arrays类
数组是编程时最常用的数据结构之一,数组可以包含任何数据类型,一旦创建便只可存储指定类型的数据。向量的功能更强大,它是允许不同类型元素共存的变长数组。Array(数组)类提供了对数组运算的功能,如排序、搜索等操作。Array类的静态方法:staticvoidsort(dataType[]d),对数组进行排序(升序)1、数组Arrays类例6-10:使用Array类对数组排序。(6-10.txt)importjava.util.Arrays;classArraysClass{ publicstaticvoidmain(String[]args) { int[]num=newint[10]; for(inti=0;i<10;i++)//排序前: { num[i]=(int)(Math.random()*10)+1;//产生1~10随机数 System.out.print(num[i]+"");//打印产生的随机数 } System.out.println("\n排序后"); Arrays.sort(num);//排序 for(inti=0;i<10;i++)//排序后: System.out.print(num[i]+"");//打印排序后的数 System.out.println(); System.out.println("6的位置是:"+Arrays.binarySearch(num,6));//搜索6的位置 }}运行程序后产生一组随机数,并搜索6的位置。由于数据是随机产生,所以每次运行时数据都不同运行结果:
三、数组类和向量类
2、向量类VectorJava语言中,数组只能保存固定数目的元素,内存空间的申请也是一次完成,不能在创建后再追加数组元素。为此又引入了向量类Vector。向量也是一组对象的集合,但它可以追加对象元素的数量,相当于一个变长数组。在这些场合中,使用Vector比较方便:·对象的数目不定;·序列中的元素都是对象;·组合不同类的对象成一序列;·频繁地插入或删除序列中的对象。
三、数组类和向量类
(1)声明并创建Vector对象
Vector类的构造函数:Vector();Vector(Collectionc);Vector(intinitialCapacity);Vector(intinitialCapacity,intcapacityIncrement);(2)几个常用的方法
1)向向量中增加一个元素(不是插入元素)
add(intindex,Objectelement);2)批量增加元素
addAll(Collectionc);3)获取向量的容量空间(余量空间)intcapacity();4)指定位置插入元素insertElement(Objectobj,intindex);2、向量类Vector例6-11:向量类的应用。创建一个向量对象,将其他对象如字符串添加到向量中,然后为字符串排序。(6-11.txt)importjava.util.*;classVectorExm{ publicstaticvoidmain(String[]args) { Vectorvect=newVector(); //空向量对象 Stringstr[]={"ZS张三","LS李四","WW王五","ZL赵六"}; for(intj=0;j<str.length;j++) vect.add(str[j]); //对象添加到向量中 Collections.sort(vect); //对向量的对象排序 for(intj=0;j<vect.size();j++) System.out.print(vect.get(j)""); //打印向量中的对象 }}运行结果:LS李四
WW王五
ZL赵六
ZS张三排序(按字符的ASCII值)四、
Java语言基础类库
四、
Java语言基础类库1、Java类库介绍
使用Java中的类库,在编写程序时用户不必每次都从头开始,只需要对特定的问题自行编写类,这些类继承了某个已经存在的系统标准类,或使用这些已存在的标准类,以提高编程效率。定义Java类库按不同功能被划分成几十个包,每个包中包含了有若干个具有特定功能和相互关系的类和接口。几个常用的包:(1)java.lang包(2)java.io包(3)java.util包(4)java.awt包(5)javax.swing包(6)java.applet包(7)包(8)java.sql包
三、数组类和向量类
2、Java语言核心类库下面我们对Java语言核心类库java.lang包作简单介绍1.Objcet类正如我们过去曾经介绍过的那样,Object类是Java程序中所有类的父类(直接的或间接的),也是所有类库中类的父类,即所有的类都是从Object类派生出来的。2.Class类Class类封装对象或接口运行时的状态,当类被加载时,类Class的对象被自动创建,不能显式创建一个Class类的对象。例6-12:使用系统Class类,获取应用程序的类名和其父类名。(6-12.txt)3.System类提供标准的输入/输出、运行时系统(Runtime)信息。System类不能进行实例化,它的属性和方法均是static型,直接用类名引用。例6-13:退出程序的方法(6-13.txt)例6-14:数组复制(6-14.txt)例6-15:获取计算机系统的相关信息(6-15txt)
例6-16:设置系统的相关属性(6-16.txt)2、Java语言核心类库例6-12:使用系统Class类,获取应用程序的类名和其父类名。(6-12.txt)importjava.awt.*;importjava.awt.event.*;publicclassClass_ObjectextendsFrame{ Class_Object() { super("getClass()和getSuperClass()、getName()方法"); } publicstaticvoidmain(String[]args)//程序的入口方法 { Class_Objectfrmclo=newClass_Object();//创建框架窗体 //设置框架窗体的事件监听(关闭窗体事件) frmclo.addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente) { System.exit(0); } }; Labelout=newLabel("单击关闭按钮,可以关闭该窗口"); frmclo.setLayout(newFlowLayout()); frmclo.add(out);
2、Java语言核心类库 Labeldis1=newLabel();//创建几个标签 Labeldis2=newLabel(); Labeldis3=newLabel(); ClassclassObj; classObj=frmclo.getClass(); //得到类的引用 dis1.setText("类名:"+classObj.getName()); dis2.setText("类名:"+frmclo.getClass()); classObj=classObj.getSuperclass(); //得到引用的超类 dis3.setText("超类:"+classObj.getName());//frmclo.getSuperclass();//不能用此语句 frmclo.add(dis1);//加入标签 frmclo.add(dis2); frmclo.add(dis3); frmclo.setSize(200,100); frmclo.setBackground(Color.yellow);//框架背景色 //frmclo.pack(); frmclo.show();//显示框架窗体 }}运行结果:2、Java语言核心类库例6-13:退出程序的方法(6-13.txt)publicclassProgramExit{ publicstaticvoidmain(Stringargs[]) { //程序运行代码,根据代码的运行情况设置逻辑类型的状态值 intb=1; if(args.length>0) b=Integer.parseInt(args[0]);//命令行带一个参数 if(b==0) { System.out.println("应用程序正常结束"); System.exit(b); } else { //异常退出 System.out.println("应用程序异常结束"); System.exit(b); } }}运行结果:运行:javaProgramExit0或javaProgramExit1结果是“程序正常退出”或“程序异常退出”2、Java语言核心类库例6-14:数组复制(6-14.txt)classArrayCopy{//声明定义初始化数组 staticbytea[]={65,66,67,68,69,70,71,72,73,74}; staticbyteb[]=newbyte[a.length];//声明定义数组,大小等于a的长度 publicstaticvoidmain(Stringargs[]) { System.out.println("a="+newString(a)); System.arraycopy(a,0,b,0,a.length);//调用复制数组的方法 System.out.println("b="+newString(b));}}运行结果:a=ABCDEFGHIJb=ABCDEFGHIJ2、Java语言核心类库例6-15:获取计算机系统的相关信息例(6-15txt)
classDisplayProperty{ publicstaticvoidmain(String[]args) {//以下是调用上面的方法getProperty(),获取相关的属性 System.out.println(System.getProperty("java.version")); System.out.println(System.getProperty("file.separator")); System.out.println(System.getProperty("java.vm.version")); System.out.println(System.getProperty("os.version")); System.out.println(System.getProperty("")); System.out.println(System.getProperty("java.class.path")); System.out.println(System.getProperty("java.vendor")); }}2、Java语言核心类库例6-16:设置系统的相关属性(6-16.txt)publicclassSetSP{ publicstaticvoidmain(Stringargs[]) {
StringstrProperty=System.getProperty("java.io.tmpdir"); System.out.println("原来的临时文件存储目录名称:"+strProperty); System.out.println("将临时文件目录设置为C:/Tmp"); StringoldProperty=System.setProperty("java.io.tmpdir","C:/Tmp"); strProperty=System.getProperty("java.io.tmpdir"); System.out.println("设置后的临时文件存储目录名称:"+strProperty); }}运行结果:原来的临时文件存储目录名称:D:\DOCUME~1\cyx\LOCALS~1\Temp\将临时文件目录设置为C:/Tmp设置后的临时文件存储目录名称:C:/Tmp
2、Java语言核心类库
4.Runtime类Runtime类封装了运行时环境。例6-17:测试计算机的系统内存,并执行记事本程序。(6-17.txt)5.基本数据类型(包装)类数据类型类对应相应的基本数据类型,类名与数据类型的名字相似,但第一个字母需大写。包装类名
数据类型Boolean booleanCharacter charDouble doubleInteger intLong longFloat floatByte byte(1)Integer类例6.18:输出整数的二、八、十六进制数表示。(6-18.txt)(2)基本数据类型和字符串的相互转换6.Math类提供用于数学运算的标准函数及常数,它们都是static型的,故在使用时直接用类名作前缀,不需要创建Math类的对象。2、Java语言核心类库例6-17:测试计算机的系统内存,并执行记事本程序。(6-17.txt)classGetMemory{ publicstaticvoidmain(Stringargs[]) { Runtimert=Runtime.getRuntime(); longmem1,mem2; Integersomeints[]=newInteger[100]; System.out.println("总内存:"+rt.totalMemory());//总内存 mem1=rt.freeMemory();//可用内存 System.out.println("可用内存:"+mem1); rt.gc(); //内存回收 mem1=rt.freeMemory(); System.out.println("可用内存:"+mem1);//可用内存 for(inti=0;i<100;i++)//占用内存 someints[i]=newInteger(i); mem2=rt.freeMemory(); System.out.println("可用内存:"+mem2); //可用内存 System.out.println("使用的内存:"+(mem1-mem2));//用的内存 //discardIntegers
2、Java语言核心类库
for(inti=0;i<100;i++) someints[i]=null; rt.gc();//释放内存 mem2=rt.freeMemory(); System.out.println("可用内存
:"+mem2);//可用内存 //调用记事本程序 rt.exec("notepad"); System.out.println("Errorexecutingnotepad.");}}运行结果:2、Java语言核心类库例6.18:输出整数的二、八、十六进制数表示。(6-18.txt)publicclassIntegerChange{publicstaticvoidmain(String[]args){ Stringnm=newString("445"); intn=Integer.parseInt(nm); System.out.println("十进制表示:"+n); System.out.println("二进制表示:"+Integer.toBinaryString(n)); System.out.println("八进制表示:"+Integer.toOctalString(n)); System.out.println("十六进制表示:"+Integer.toHexString(n));} }运行结果:十进制表示:445二进制表示:110111101八进制表示:675十六进制表示:1bd四、
Java语言基础类库
3、实用类库java.utiljava的utility类库是Java核心包的一部分,即java.util包。该包中有很多实用的类1.日期类Date日期类Date用来操作系统日期、时间,如天数计算、日期比较等。
例6-19:输出时间和日期(6-19.txt)2.日历类CalendarCalendar类是抽象类,故不能用new创建对象,但可使用其getInstance()方法得到默认时区的一个对象。
例6-20:使用日历类显示日期时间和设置日期时间。(6-20.txt)3.标准日历时钟类GregorianCalendarGregorianCalendar是一个标准的日历类,其对象也就是Calendar类的getInstance()方法返回的用默认的地区、时区表示的当前日期和时间的对象。例6-21:显示当前的的日期和时间(6-21.txt)4.随机类Random
Random类是伪随机数产生类。使用相同的初始化值(又称种子数)生成一个Random类的对象时,可获得相同的一组随机数。使用不同的种子数则可产生不同的随机数。3、实用类库java.util例6-19:输出时间和日期(6-19.txt)importjava.util.Date;classCurrentDate{ publicstaticvoidmain(Stringargs[]) { Datenow=newDate();//创建日期对象 System.out.println("现在是:");//显示当前日期和时间 System.out.print((1900+now.getYear())+"年");//取年 System.out.print(now.getMonth()+"月");//月 System.out.print(now.getDay()+"日");//日 System.out.print(now.getHours()+"时");// System.out.print(now.getMinutes()+"分"); System.out.println(now.getSeconds()+"秒"); System.out.println("现在是:"+now);//用toString()方法显示 longmsec=now.getTime();//显示毫秒数,从January1,1970GMT System.out.println("从Jan.1,1970GMT到现在的毫秒数
="+msec); }}3、实用类库java.util
例6-20:使用日历类显示日期时间和设置日期时间。(6-20.txt)importjava.util.Calendar;classACalendar{ publicstaticvoidmain(Stringargs[]) { Stringmonths[]={//初始化数组 "Jan","Feb","Mar","Apr", "May","Jun","Jul","Aug", "Sep","Oct","Nov","Dec"};CalendaraCalendar=Calendar.getInstance();//用默认时区得到对象System.out.print("Date:");//显示当前日期System.out.print(months[aCalendar.get(Calendar.MONTH)]);//使用常数System.out.print(""+aCalendar.get(Calendar.DATE)+"");System.out.println(aCalendar.get(Calendar.YEAR));System.out.print("Time:");//显示和时间System.out.print(aCalendar.get(Calendar.HOUR)+":");//打印时间System.out.print(aCalendar.get(Calendar.MINUTE)+":");System.out.println(aCalendar.get(Calendar.SECOND));aCalendar.set(Calendar.HOUR,10);//设置时间aCalendar.set(Calendar.MINUTE,29);aCalendar.set(Calendar.SECOND,22); System.out.print("Updatedtime:");//显示设置后的时间System.out.print(aCalendar.get(Calendar.HOUR)+":");//打印时分秒System.out.print(aCalendar.get(Calendar.MINUTE)+":");System.out.println(aCalendar.get(Calendar.SECOND));}}3、实用类库java.util例6-21:显示当前的的日期和时间(6-21.txt)importjava.awt.*;importjava.util.GregorianCalendar;
publicclassGregorianextendsFrame{ publicstaticvoidmain(String[]args){ Gregoriangr=newGregorian();//创建框架对象 TextAreata=newTextArea();//文本区域对象 GregorianCalendargc=newGregorianCalendar();//日历时钟 ta.append("Year:"+gc.get(GregorianCalendar.YEAR)+"\n");//年 ta.append("Month:"+gc.get(GregorianCalendar.MONTH)+"\n");//月 ta.append("Day:"+gc.get(GregorianCalendar.DATE)+"\n");//日 ta.append("Hour:"+gc.get(GregorianCalendar.HOUR)+"\n");//时 ta.append("Minute:"+gc.get(GregorianCalendar.MINUTE)+"\n");//分 ta.append("Second:"+gc.get(GregorianCalendar.SECOND)+"\n");//秒 gr.add(ta,BorderLayout.CENTER);//文本区域加入到框架中心,用边界布局 gr.setSize(300,200); gr.setVisible(true); }}运行结果:五、
实例学习五、
实例学习实例学习1:找出距离最近的点对假设有一个集合的点,找出最接近的点对问题就是找到两个点,它们到彼此的距离最近。例如:在图6-5中,点(1,1)和(2,0.5)是彼此之间距离最近的一对点。解决这个问题的方法有好几种。一种直观的方法就是计算所有点对之间的距离,并且找出最短的距离。(6-实例学习-1.txt)6-实例学习-1.txtimportjava.util.Scanner;
public
classFindNearestPoints{
public
static
voidmain(String[]args){ Scannerinput=newScanner(System.in); System.out.print("Enterthenumberofpoints:");
intnumberOfPoints=input.nextInt();
//Createanarraytostorepoints
double[][]points=new
double[numberOfPoints][2]; System.out.print("Enter"+numberOfPoints+"points:");
for(inti=0;i<points.length;i++){ points[i][0]=input.nextDouble(); points[i][1]=input.nextDouble(); }
//p1andp2aretheindicesinthepointsarray
intp1=0,p2=1;//Initialtwopoints
doubleshortestDistance=distance(points[p1][0],points[p1][1], points[p2][0],points[p2][1]);//InitializeshortestDistance
演示示例:找出距离最近的点对6-实例学习-1.txt//Computedistanceforeverytwopoints
for(inti=0;i<points.length;i++){
for(intj=i+1;j<points.length;j++){
doubledistance=distance(points[i][0],points[i][1], points[j][0],points[j][1]);//Finddistance
if(shortestDistance>distance){ p1=i;//Updatep1 p2=j;//Updatep2 shortestDistance=distance;//UpdateshortestDistance} } }//DisplayresultSystem.out.println("Theclosesttwopointsare"+"("+points[p1][0] +","+points[p1][1]+")and("+points[p2][0]+"," +points[p2][1]+")"); }
/**Computethedistancebetweentwopoints(x1,y1)and(x2,y2)*/public
static
doubledistance(doublex1,doubley1,doublex2,doubley2){
returnMath.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); }}
6-实例学习-1.txt运行结果:Enterthenumberofpoints:8Enter8points:-13-1-11120.52-133424-0.5Theclosesttwopointsare(1.0,1.0)and(2.0,0.5)程序提示用户输入点的个数,从控制台读取多个点,并将它们存储在一个名为points的二维数组中。程序使用变量shortestDistance来存储两个距离最近的点而这两个点在points数组中的下标都存储在p1和p2中。对每一个索引值为i的点,程序会对所有的j>i计算points[i]和
points[j]之间的距离。只要找到比当前最短距离更短的距离,就更新变量shortestDistance以及p1和p2。两个点(x1,y1)和(x2,y2)之间的距离可以使用公式
计算。五、
实例学习实例学习2:猜生日通过用三维数组来存储5个集合的数字来简化程序,然后使用循环提示用户回答。(6-实例学习-2.txt)importjava.util.Scanner;public
classGuessBirthdayUsingArray{
public
static
voidmain(String[]args){
intday=0;//Daytobedetermined
intanswer;int[][][]dates={{{1,3,5,7},{9,11,13,15},{17,19,21,23},{25,27,29,31}},{{2,3,6,7},{10,11,14,15},{18,19,22,23},{26,27,30,31}},
演示示例:猜生日6-实例学习-2.txt{{4,5,6,7},{12,13,14,15},{20,21,22,23},{28,29,30,31}},{{8,9,10,11},{12,13,14,15},{24,25,26,27},{28,29,30,31}},{{16,17,18,19},{20,21,22,23},{24,25,26,27},{28,29,30,31}}};//CreateaScannerScannerinput=newScanner(System.in);
for(inti=0;i<5;i++){System.out.println("IsyourbirthdayinSet"+(i+1)+"?");
for(intj=0;j<4;j++){
for(intk=0;k<4;k++)System.out.printf("%4d",dates[i][j][k]);System.out.println();}
System.out.print("\nE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年德宏职业学院单招综合素质笔试参考题库带答案解析
- 2026年广州城建职业学院单招综合素质考试备考题库带答案解析
- 2026年甘肃农业职业技术学院高职单招职业适应性考试参考题库带答案解析
- 投资融资项目合作协议(2025年)
- 停车场租赁补充合同协议2025年试行版
- 2026年海南政法职业学院单招综合素质考试参考题库带答案解析
- 2026年新疆科技职业技术学院单招职业技能考试模拟试题附答案详解
- 碳汇林监测协议2025年知识产权归属
- 2026年贵州经贸职业技术学院单招综合素质考试备考题库带答案解析
- 数字孪生城市规划咨询合同协议
- TLR4-MyD88信号转导通路:解锁哮喘小鼠气道黏液高分泌机制的关键
- 华为体系文件管理制度
- 货运司机雇佣合同协议
- 护士N0升N1述职报告
- 江西省九江市2024-2025学年上学期七年级+期末英语试卷
- 催化剂行业营销工作总结
- 半条被子的故事课件
- 人音版七年级音乐下册(简谱)第一单元 《☆一二三四歌》教案
- 全国各气象台站区站号及经纬度
- 危险废物贮存污染控制标准解读II
- 起重装卸机械操作工国家职业技能标准(2023年版)
评论
0/150
提交评论