《Java面向对象程序设计》实验实验八输入输出流.docx
- 文档编号:16434265
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:15
- 大小:65.47KB
《Java面向对象程序设计》实验实验八输入输出流.docx
《《Java面向对象程序设计》实验实验八输入输出流.docx》由会员分享,可在线阅读,更多相关《《Java面向对象程序设计》实验实验八输入输出流.docx(15页珍藏版)》请在冰点文库上搜索。
《Java面向对象程序设计》实验实验八输入输出流
广西科技大学
计通学院
《Java面向对象程序设计》实验
实验八输入输出流
学生姓名:
×××
学号:
×××
班级:
×××
指导老师:
×××
专业:
计算机科学与技术
提交日期:
×××年××月××日
实验报告内容
1.实验目的
掌握字符输入、输出流用法;掌握使用SCanner类解析文件;
掌握COnsole流的使用。
2.实验内容
实验教材-第12章实验1、2、3
字符输入输出流;SCanner类和Console类
要求:
完善程序,给出实验结果截图;完成试验后练习。
3.程序代码及运行结果:
实验1举重成绩单
//AnalysisResult.java
importjava.io.*;
importjava.util.*;
PUbIiCclassAnalysisResult{
PUbIiCStatiCvoidmain(String[]args){
FilefRead=newFile("score.txt");
FilefWrite=newFile("scoreAnalysis.txt");try{
Writerout=newFiIeWriter(fWrite);
BUfferedWriterbufferWrite=new
BUfferedWriter(out);
Readerin=newFiIeReader(fRead);
BUfferedReaderbufferRead=new
BUfferedReader(in);
Stringstr=null;
WhiIe((Str=bufferRead.readLine())!
=null){double
totalScore=Fenxi.getTotalScore(str);
Str=St叶"总成绩:
"+totalScore;
SyStem.out.println(str);
bufferWrite.write(str);bufferWrite.newLine();
}
bufferRead.close();
bufferWrite.close();
}
CatCh(IOEXCePtione){
SyStem.out.println(e.toString());
}
}
}
//Fenxi.java
importjava.util.*;
PUbIiCclassFenXi{
PUbIiCStatiCdoublegetTotalScore(StringS){
Stringregex="[^0123456789.]";
StringdigitMess=s.replaceAII(regex,"*");
StringTokenizerfenxi=new
StringTokenizer(digitMess,"*");
doubletotalScore=0;
while(fenxi.hasMoreTokens()){
double
SCOre=Double.parseDouble(fenxi.nextToken());totalScore=totalScore+score;
}
returntotalScore;
//score.txt
姓名:
张二,
抓举成绩
106kg,
挺举189kg
姓名:
李四,
抓举成绩
108kg,
挺举186kg
姓名:
周五,
抓举成绩
112kg,
挺举190kg
运行结果如图1所示
CatCh(IOEXCePtiOnexp){
SyStem.out.println(exp.toString());
}
实验2统计英文单词
//WOrdStatiStiC.java
importjava.io.*;
importjava.util.*;
PUbIiCclassWOrdStatiStiC{
VeCtOr
FiIefile=newFile("english.txt");
SCannersc=null;
Stringregex;
WOrdStatiStiC(){
allWord=newVeCtOr
sc=newScanner(file);sc.useDelimiter(regex);
正则表达式
}
voidSetFiIeName(Stringname){
file=newFile(name);
try{
sc=newScanner(file);sc.useDelimiter(regex);
}
CatCh(IOEXCePtionexp){
SyStem.out.println(exp.toString());
}
}
voidWOrdStatiStiC(){
try{
WhiIe(SC.hasNext()){StringWOrd=SC.next();allWord.add(word);
if(!
noSameWord.cOntainS(WOrd))noSameWord.add(word);
}
}
CatCh(EXCePtione){}
}
PUbIiCVeCtOr
}
PUbIiCVeCtOr
}
//OUtPUtWOrdMeSS.java
importjava.util.*;
PUbliCclassOUtPUtWOrdMeSS{
PUbIiCStatiCvoidmain(String[]args){
VeCtOr
WOrdStatiStiCStatiStiC=new
WOrdStatiStiC();
StatiStiC.setFileName("hello.txt");
StatiStiC.WordStatistic();
allWord=statistic.getAllWord();
noSameWOrd=StatiStiC.getNoSameWord();
SyStem.out.println("共有
"+allWord.size()+"个英文单词");
SyStem.out.println("有
"+noSameWord.size()+"个互不相同英文单词");
SyStem.out.println("按出现的频率排列:
");
intcount[]=newint[noSameWord.size()];
for(inti=0;i Strings1=noSameWord.elementAt(i); for(intj=O;j Strings2=allWord.elementAt(j); if(s1.equals(s2)) count[i]++; } } for(intm=0;m for(int n=m+1;n if(coUnt[n]>coUnt[m]){String temp=noSameWordeIementAt(m); noSameWord.setElementAt(noSameWord.elementAt(n), m); noSameWord.setElementAt(temp, n); intt=coUnt[m]; count[m]=count[n]; count[n]=t; } } } for(intm=0;m double frequency=(1.0*coUnt[m])∕allWord.size(); SyStem.out.printf("%s%-7.3f", noSameWord.elementAt(m),frequency); } } } 运行结果如图2所示 共有6个英文单词 有6个互不相同英文单词 按岀现的解排列: what: 0.167areιθΛ67you: 0.167doing: 0,167is: 0*167Java: 0,167 图2 实验3密码流 //PaSSWOrdJaVa importjava.io.*; PUbliCclassPaSSWOrd{ PUbliCStatiCvoidmain(String[]args){booleanSUCCeSS=false; intcount=0; Consolecons; char[]PaSSWd; conS=SyStem.console(); while(true){ SyStem.out.print("输入密码: "); PaSSWd=Cons.readPassword(); count++; StringPaSSWOrd=newString(passwd); if(password.equals("tiger123")){ SUCCeSS=true; 您第"+count+"次输入的 SyStem.out.println("密码正确! "); break; }else{ 您第"+count+"次输入的 SyStem.out.println("密码"+password+"不正确! "); }if(count==3){ 您"+count+"次输入的密 SyStem.out.println("码都不正确! "); SyStem.exit(0); } } if(success){ Filefile=newFile("score1.txt try{ FileReaderinθne=newFileReader(file); BUfferedReaderinTow=new BUfferedReader(inθne); Strings=null; WhiIe((s=inTow.readLine())! =null){ SyStem.out.println(s); } inθne.close(); inTow.close(); }catch(IOExceptionioe){} } } } //score.txt 姓名: 张三, 抓举成绩 106kg, 挺举189kg 姓名: 李四, 抓举成绩 108kg, 挺举186kg 姓名: 周五, 抓举成绩 112kg, 挺举190kg 运行结果如图3所示 4.实验后的练习: 实验1 有如下格式的成绩单(文本格式)score.txt。 姓名: 张三,数学72分,物理67分,英语70分。 姓名: 李四,数学92分,物理98分,英语88分。 姓名: 周五,数学68分,物理80分,英语77分。 要求按行读入取成绩单,并在该行的后面尾加上该同学的总成绩,然后再将该行写入到一个名字为 SCoreAnalysis.txt的文件中。 //AnalysisResult.java importjava.io.*; importjava.util.*; PUbIiCclassAnalysisResult{ PUbIiCStatiCvoidmain(String[]args){ FilefRead=newFile("score.txt"); FilefWrite=newFile("scoreAnalysis.txt"); try{ Writerout=new FiIeWriter(fWrite,true); BUfferedWriterbufferWrite=new BUfferedWriter(out); Readerin=newFiIeReader(fRead); BUfferedReaderbufferRead=new BUfferedReader(in); StringStr=null; WhiIe((Str=bufferRead.readLine())! =null){ double totaIScore=Fenxi.getTotalScore(str); Str=St叶"总分: "+totaIScore; SyStem.out.println(str); bufferWrite.write(str);bufferWrite.newLine(); } bufferRead.cIose(); bufferWrite.cIose(); } CatCh(IOEXCePtiOne){ SyStem.out.println(e.toString()); } } } //Fenxi.java importjava.util.*; PUbIiCclassFenXi{ PUbIiCStatiCdoublegetTotalScore(StringS){ SCannerSCanner=newScanner(s); SCanner.useDelimiter("[^0123456789.]+"); doubletotalScore=0; WhiIe(SCanner.hasNext()){ try{ doubleSCOre=SCanner.nextDouble(); totalScore=totalScore+score; } CatCh(InputMismatchExceptionexp){ Stringt=scanner.next(); } } returntotalScore; } } //score.txt 姓名: 张三,数学72分,物理67分,英语70分。 姓名: 李四,数学92分,物理98分,英语88分。 姓名: 周五,数学68分,物理80分,英语77分。 姓名: 张三,数学72分,物理67分,英语70分•总分: 209.0姓名: 李四,数学92分,物理93⅛,英语關分。 总分: 278.0姓名: 周五,数学68分,物理80分,英语7? 分。 总分: 225上 图4 实验2 按字典序输出全部不相同的单词。 //DiCtiOnary.java importjava.util.*; PUbIiCclassDiCtionary{ PUbIiCStatiCvoidmain(Stringargs[]){ VeCtOr WOrdStatiStiCStatiStiC=newWOrdStatiStiC(); StatiStiC.setFileName("hello.txt"); StatiStiC.WordStatistic();//StatiStiC调用 WOrdStatiStiC()方法 allWord=statistic.getAIIWord(); noSameWOrd=StatiStiC.getNoSameWord(); SyStem.out.println("共有"+allWord.size()+" 英文单词"); SyStem.out.println("有"+noSameWord.size()+" 个互不相同英文单词"); SyStem.out.println("按字典顺序排列: "); Strings[]=newString[noSameWord.size()];for(inti=0;i } ArrayS.sort(s); for(inti=0;i SyStem.out.println(s[i]+""); } } } 运行结果如图5所示 真看齐羹女单鬲 有&个互不相同英文单词 按字戟顺序扌非列; ZIaVa are doing is What you 图5 实验3 编写一个程序,程序运行时,要求用户输入的密码是: hello。 如果用户输入了正确的密码。 程序将输出“你好,欢迎你! ”程序允许用户2次输入的密码不正确,一旦超过2次,程序将立刻退出。 //PaSSWord.java importjava.io.*; importjava.util.Scanner; PUbIiCclassPaSSWord{ PUbIiCStatiCvoidmain(Stringargs[]){ intcount=0; Consolecons; StringPaSSWd; SCannersc=new SCanner(System.in);〃ConS=SyStem.console(); while(true){ SyStem.out.print("输入密码: "); PaSSWd=SC.next();// count++; StringPaSSWOrd=newString(PaSSWd);if(password.equals("hello")){ SyStem.out.println("你好,欢迎你! "); break; } else{ SyStem.out.println("您第"+count+"次输入的密"+password+"不正确"); } if(coUnt==3){ SyStem.out.println("您"+count+"次输入的密码都不正确"); SyStem.exit(0); } } } } 运行结果如图6所示 输入密码: hello 你好J欢迎你! 图6 5.实验心得和体会 这次实验中,我感觉比较难理解和掌握的就是Console类 输入密码: EXCePtiOninthread*lmaint,ja旧」亦牛NullPointerEKceptionatShiy阳3Password.P日ss⅛tord*main(Eg⅞⅞⅛αHAjg⅛¾113)了,在实验3密码流的代码在eclipse中运行出错如下图所示: 就是输入不了密码,后来通过找寻解决方法,才知道了在JDK6中java.io.Console类专用来访问基于字符的控制台设备, 然后使用Cmd命令提示符来运行就可以输入密码和显示结果TO 通过这次实验,大概了解了字符输入、输出流用法,如 何去使用SCanner类解析文件,对Console类的使用有个大概的认知。 总而言之,这次实验收获蛮大的,敲代码的效率比以往提高了,出错率也少了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java面向对象程序设计 Java 面向 对象 程序设计 实验 输入输出