实验9 常用系统类.docx
- 文档编号:11690708
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:17
- 大小:23.67KB
实验9 常用系统类.docx
《实验9 常用系统类.docx》由会员分享,可在线阅读,更多相关《实验9 常用系统类.docx(17页珍藏版)》请在冰豆网上搜索。
实验9常用系统类
实验9常用系统类实验9常用系统类
9.1实验目的
(1)掌握字符串处理方法;
(2)了解Math类的数学方法的使用;
(3)熟悉各种数据类型包装类的使用;
(4)了解Vector类的使用。
9.2知识要点
9.2.1Object类
(1)Object类处于Java继承层次中最顶端的类,它封装了所有类的公共行为。
(2)
Object类的equals()方法采用的是==运算比较,也就是只有两个引用变量指向同一对象时才相等。
而实际上我们期望该方法进行对象的内容比较,因此子类中通常将equals()方法改写。
(3)
Object类的toString()方法是返回对象的描述信息,在Object类中该方法返回对象的类名及对象引用地址。
子类中通常要提供自己的toString()方法,以便更好描述对象。
9.2.2Math类
(1)Math类中的方法和属性均为静态的,Math类不能创建对象。
(2)表9-1列出的Math类的方法不少提供了参数多态。
(3)方法random()产生的随机数的范围是0~1之间的不包括0和1的一个小数形式的数。
表9-1Math类的常用方法
方法功能
intabs(inti)求整数的绝对值;另有针对long,float,double的多态方法
doubleceil(doubled)不小于d的最小整数(返回值为double型)
doublefloor(doubled)不大于d的最大整数(返回值为double型)
Intmax(inti1,inti2)求两个整数中最大数;另有针对long,float,double的多态方法
Intmin(inti1,inti2)求两个整数中最小数;另有针对long,float,double的多态方法
doublerandom()0~1之间的随机数
Intround(floatf)求最靠近f的整数
longround(doubled)求最靠近d的长整数
doublesqrt(doublea)求平方根
doublecos(doubled)求d的cos函数
注:
其它求三角函数的方法有sin,tan
doublelog(doubled)求自然对数
doubleexp(doublex)求e的x次幂(ex)
doublepow(doublea,doubleb)求a的b次幂
2.3数据类型包装类
(1)每种基本数据类型均有对应的包装类,除char和int的包装类为Character和Integer外,其他类型的包装类的名字均为相应类型的关键字将首字符换大写(例如:
long的包装类为Long).
(2)包装类用来实现该类型数据的一些处理操作,尤其是其中的静态方法,见表9-2。
表9-2数据包装类的常用方法
方法功能
intInteger.parseInt(Strings)将数字串转化为整数
longLong.parseLong(Strings)将数字串转化为长整数
doubleDouble.parseDouble(Strings)将数字串转化为双精度数
booleanCharacter.isDigit(charc)判断某字符是否为数字
booleanCharacter.isLetter(charc)判断某字符是否为字母
StringInteger.toString(intk)将一个整数转换为字符串
StringInteger.toBinaryString(intk)将一个整数转换为二进制字符串
9.2.4String类--字符串常量
(1)String类创建的字符串对象的内容不能改变;
(2)理解字符串的拼接运算的含义,可以将任何数据类型的数据与字符串进行拼接,包括对象类型的数据,它将调用对象的toString()的结果与串拼接。
拼接的结果为一个新的串对象,不会改变源字符串对象的内容。
例如:
Stringx="hello";
Stringx1=x;//x1和x指向同一串对象
Stringy="good";
x=x+y+2;//修改x的值,让其指向新生成的串。
System.out.println(x);
System.out.println(x1);
输出结果为:
hellogood2
hello
(3)String类提供了丰富的实例方法,见表9-3。
表9-3String类的实例方法
方法功能
booleanequals(Objectobj)当前串与参数串比较是否相等
booleanequalsIgnoreCase(Strings2)比较两个字符串,不计较字母的大小写
intlength()求字符串长度
Stringtrim()去除前导空格和尾部空格
intindexOf(intch,intfromIndex))从formIndex位置开始往后查找字符串中的字符ch的首次出现位置。
intindexOf(Strings,intfromIndex))从formIndex位置开始往后查找字符串中的子串的首次出现位置。
charcharAt(intindex)从串中获取指定位置的字符
Stringsubstring(intbegin,intend)根据始末位置从串中获取子串
String[]split(Stringregex)按照分隔符将串分成若干子串
Stringreplace(charch1,charch2)将字符串中所有ch1字符换为ch2
9.2.5StringBuffer类—可变字符串
(1)StringBuffer类创建的串可以修改,可以对串的内容进行增、删、改操作。
(2)StringBuffer的常用方法,见表9-4。
表9-4StringBuffer类的常用方法
方法功能
StringBufferappend(Objectobj)某个对象的串描述添加到
StringBuffer尾部
StringBufferinsert(intpos,Objectobj)将某个对象的串描述插入到StringBuffer中的某个位置
StringBuffersetCharAt(intpos,charch)用新字符替换指定位置字符
StringBufferdeleteCharAt(intpos)删除指定位置的字符
StringBufferreplace(intstart,intend,Stringstr)将参数指定范围的一个子串用新串替换
Stringsubstring(intstart,intend)获取所指定范围的子串
9.2.6Vector类
(1)类Vector实现了可扩展的对象数组,使用向量没有数组的范围限制,可以不断添加元素。
但向量中不能存放基本数据类型的数据,加入的数据均为对象。
(2)向量的常用访问方法见表9-5。
表9-5Vector类常用方法
方法功能
voidadd(intindex,Objectelement)将某个对象插入向量的指定位置
booleanadd(Objecto)将某个对象添加到向量中
voidaddElement(Objectobj)将某个对象添加到向量中
intsize()向量中已存放元素个数
voidclear()删去所有元素
booleancontains(Objectelem)检测向量中是否包含指定对象
Objectget(intindex)根据位置获取向量元素
intindexOf(Objectobj,intstart)
从指定位置起向后搜索对象obj,返回首次匹配位置
booleanremove(Objecto)删去指定对象
voidremoveElementAt(intindex)删去指定位置的元素
(3)对向量的遍历访问方法(设v为一向量)
方法1:
通过位置访问
for(intk=0;k 输出v.get(k); 方法2: 通过使用迭代子进行遍历 Iteratorp=v.iterator(); while(p.hasNext()) 输出p.next()); 9.3样例程序 样例1: 编写一个方法统计一个字符在某字符串中的出现次数;从命令行参数获取一个算术表达式,利用前面方法判断该表达式的左右括号数量是否一致,如果一致,输出“YES”,否则输出“NO”。 【参考程序】 publicclassCount{ publicstaticvoidmain(Stringargs[]){ Strings=args[0]; if(count(s,’(‘)==count(s,’)’))//看左括号与右括号的出现次数是否一样多 System.out.println("YES"); else System.out.println("NO"); } /*统计字符c在串s中的出现次数*/ publicstaticintcount(Strings,charc){ intx=0;//计数变量 for(intk=0;k if(s.charAt(k)==c)x++;//在第k个位置出现,则计数增1 returnx; } } 样例2: 四位同学中一位做了好事,校长问这四位是谁做的好事。 A说: 不是我。 B说: 是C。 C说: 是D。 D说: C胡说。 已知三个人说的是真话,一个人说的是假话。 根据这些信息,找出做了好事的人。 【参考程序】 publicclassgood{ publicstaticvoidmain(Stringa[]){ charman;//做好事的人 Stringx="ABCD";//A、B、C、D中的一个 for(intk=0;k<=3;k++){//用循环去测试各种情形 intcount=0; man=x.charAt(k);//假设第k个是做好事者 if(man! ='A')count++;//A说的话 if(man=='C')count++;//B说的话 if(man=='D')count++;//C说的话 if(! (man=='D'))count++;//D说的话 if(count==3)//如果有3人说的是真话,则为要找结果,输出 System.out.println("thisman="+man); } } } 【说明】四个人中,每个人均有可能是做好事的人,所以用循环去测试,分别针对每种情形测试说真话的人的个数,如果count值为3,则为要找结果。 【编程技巧】 (1)利用循环去测试每种可能性; (2)将每人说的话用逻辑表达。 (3)统计说真话的人的计数变量赋初值0要放在循环内。 样例3: 设有中英文单词对照表,输入中文单词,显示相应英文单词,输入英文单词显示相应中文单词。 如果没找到,显示“无此单词”。 【参考程序】 publicclassWord{ publicstaticvoidmain(Stringargs[]){ String[][]x={{"good","好"},{"bad","坏"},{"work","工作"}}; intk; Stringin=args[0]; if((k=find_e(x,in))! =-1) System.out.println(x[k][1]); elseif((k=find_c(x,in))! =-1) System.out.println(x[k][0]); else System.out.println("无此单词"); } /*根据英文找中文,找到则返回所在行位置,未找到则返回-1*/ staticintfind_e(String[][]x,Stringy){ for(intk=0;k if(x[k][0].equals(y)) returnk; return-1; } /*根据中文找英文,找到则返回所在行位置,未找到则返回-1*/ staticintfind_c(String[][]x,Stringy){ for(intk=0;k if(x[k][1].equals(y)) returnk; return-1; } } 【说明】这里为了简化问题,编写了两个方法,一个查找中文,一个查找英文。 只要分别按中文和英文查找一遍即可,如果均为-1,则输出“未此单词”。 【编程技巧】 (1)编写方法实现查找可增进程序的表达清晰; (2)如何将单词中英文对应关系用二维数组表达。 样例4: 从键盘输入一个英文句子,统计该句子中英文单词的个数,将找出所有单词存放到一个数组中。 例如: 输入Hesaid,"That'snotagood idea."则输出为: 共有"+x.length+"个单词 Hesaidthatsnotagoodidea 【参考程序】 importjava.io.*; publicclassListWords{ publicstaticvoidmain(String[]args)throwsIOException{ Stringline; charch; booleanisWord=false; StringBufferword=newStringBuffer(); System.out.println("输入一行文本: "); BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); line=br.readLine(); for(inti=0;i ch=line.charAt(i); if(Character.isLetter(ch)){ word.append(ch); isWord=true; } else{ if(isWord){ word.append(","); isWord=false; } } } Stringx[]=word.toString().split(","); System.out.println("共有"+x.length+"个单词"); for(intn=0;n System.out.print(x[n]+""); } } 【说明】一个单词的判断条件是已字母开头,后跟若干字母。 也就是遇到非字母的单词即可断定为单词结束。 为了便于处理,这里将所有单词拼接到一个串中,单词之间用逗号分隔。 程序中引入了一个逻辑变量isWord来标记当前处理字符是否为单词的部分,是则标记为true,不是则标记为false。 本例也演示了split方法的使用,可以很方便地将一个字符串按指定分隔符分离出子串并存放到数组中。 【编程技巧】 (1)定义一个StringBuffer类对象拼接所有单词,单词之间用逗号分隔。 (2)抓住单词的特点,是连续若干字母,所以遇到字母即可将其作为单词的组成部分插入StringBuffer中。 (3) 定义一个逻辑变量记录前面是否出现单词,如果出现,则逻辑变量为true,否则为false。 在处理非字母字符时通过判断该逻辑变量确定是否应插入一个逗号到StringBuffer中。 (4) 利用循环扫描处理整个字符串,在处理完毕后再将StringBuffer中的所有内容转化为String类对象,利用Split方法按逗号分隔分离出单词存入数组中。 样例5: 利用向量记录实现学生管理,能支持学生对象的增加、删除操作,每个学生对象包括学号、姓名、性别。 删除学生必须输入学生的学号。 可以设计一个操作菜单,包括“增加”、“删除”、“显示”、“退出”4个选项。 importjava.io.*; importjava.util.*; publicclassstudent{ Stringname; longstno; Stringsex; publicstudent(Stringname,longstno,Stringsex){ this.name=name; this.stno=stno; this.sex=sex; } publicStringtoString(){ return"姓名: "+name+",学号: "+stno+",性别="+sex; } publicstaticvoidmain(Stringargs[]){ Vectorgroup=newVector(); outer: while(true){ Stringch=input("选择: 1--增加,2---删除,3-显示,4--退出"); intchoice=Integer.parseInt(ch); switch(choice){ case1: group.add(inputStudent());break; case2: longstno=Long.parseLong(input("请输入学号: ")); for(intk=0;k studentx=(student)group.get(k); if(x.stno==stno) group.removeElement(x); } break; case3: Iteratorp=group.iterator(); while(p.hasNext()) System.out.println("==>"+p.next()); break; case4: breakouter; } } } /*从键盘输入一个字符串*/ publicstaticStringinput(Stringhint){ Stringx=null; BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); System.out.println(hint); try{ x=br.readLine(); }catch(IOExceptione){} returnx; } /*从键盘输入一个学生*/ publicstaticstudentinputStudent(){ Stringname=input("请输入姓名: "); longstno=Long.parseLong(input("请输入学号: ")); Stringsex=input("请输入性别: "); returnnewstudent(name,stno,sex); } } 【说明】为了简化程序,设计了两个方法: Stringinput(Stringhint): 根据提示从键盘获取一个字符串; studentinputStudent(): 从键盘获取学生相关信息构造学生对象。 【编程技巧】 (1)在输入数据的处理中编写方法,简化设计。 (2)利用向量存储学生对象,查找数据时,要从向量中读取数据进行比较,获取对象时要强制转换才能赋给代表学生的引用变量。 (3)程序演示了对向量的两种遍历处理方法。 9.4上机练习 ²基本题 1)设有一个由10个英文单词构成的字符串数组,要求: (1)统计以字母w开头的单词数; (2)统计单词中含“or”字符串的单词数; (3)统计长度为3的单词数。 2)输入一个算术表达式,例如: 45*2+23*(234-24),求出其中有多少整常数。 3)创建一个程序,输出今天的年、月、日。 提示: 创建一个java.util.Date类的对象代表当前的系统日期,使用对象的getYear()方法、getMonth()方法、getDay()方法可获得对应的年月日。 4)编写一个程序,用于计算xopy这样的表达式的值,表达式从命令行输入,其中op为+-*/%几种运算符之一,x和y代表两个实数。 5)将以下程序补充完整 importjava.util.Random; publicclassJava_2{ publicstaticvoidmain(Stringargs[]){ Randomrandom=newRandom(); floatx=random.nextFloat();//产生0.0与1.0之间的一个符点数 intn=Math.round(20*x);//构造20以内的一个整数 longf=1;//保存阶乘的结果 intk=1;//循环变量 //*********Found******** do{__________; k++; //*********Found******** }__________ System.out.println(n+"! ="+f); } } 6)将以下程序补充完整 //Java_1.java,字符串类的startsWith()和endsWith()方法 importjavax.swing.*; publicclassJava_1{ publicstaticvoidmain(Stringargs[]){ Stringstrings[]={"started","starting","ended","ending"}; Stringoutput=""; //测试startsWith()方法 for(inti=0;i if(strings[i].startsWith("st")) output+="\""+strings[i]+"\"开始于\"st\"\n"; output+="\n"; //从字符串第2个字符开始 for(inti=0;i if(strings[i].startsWith("art",2))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验9 常用系统类 实验 常用 系统