《Java面向对象程序设计》实验实验八输入输出流复习课程.docx
- 文档编号:6385612
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:13
- 大小:61.63KB
《Java面向对象程序设计》实验实验八输入输出流复习课程.docx
《《Java面向对象程序设计》实验实验八输入输出流复习课程.docx》由会员分享,可在线阅读,更多相关《《Java面向对象程序设计》实验实验八输入输出流复习课程.docx(13页珍藏版)》请在冰豆网上搜索。
《Java面向对象程序设计》实验实验八输入输出流复习课程
《Java面向对象程序设计》实验-实验八(输入输出流)
广西科技大学
计通学院
《Java面向对象程序设计》实验
实验八输入输出流
学生姓名:
×××
学号:
×××
班级:
×××
指导老师:
×××
专业:
计算机科学与技术
提交日期:
×××年××月××日
实验报告内容
1.实验目的
掌握字符输入、输出流用法;
掌握使用Scanner类解析文件;
掌握Console流的使用。
2.实验内容
实验教材-第12章实验1、2、3
字符输入输出流;Scanner类和Console类。
要求:
完善程序,给出实验结果截图;
完成试验后练习。
3.程序代码及运行结果:
实验1举重成绩单
//AnalysisResult.java
importjava.io.*;
importjava.util.*;
publicclassAnalysisResult{
publicstaticvoidmain(String[]args){
FilefRead=newFile("score.txt");
FilefWrite=newFile("scoreAnalysis.txt");
try{
Writerout=newFileWriter(fWrite);
BufferedWriterbufferWrite=newBufferedWriter(out);
Readerin=newFileReader(fRead);
BufferedReaderbufferRead=newBufferedReader(in);
Stringstr=null;
while((str=bufferRead.readLine())!
=null){
doubletotalScore=Fenxi.getTotalScore(str);
str=str+"总成绩:
"+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.*;
publicclassFenxi{
publicstaticdoublegetTotalScore(Strings){
Stringregex="[^0123456789.]";
StringdigitMess=s.replaceAll(regex,"*");
StringTokenizerfenxi=newStringTokenizer(digitMess,"*");
doubletotalScore=0;
while(fenxi.hasMoreTokens()){
doublescore=Double.parseDouble(fenxi.nextToken());
totalScore=totalScore+score;
}
returntotalScore;
}
}
//score.txt
姓名:
张三,抓举成绩106kg,挺举189kg。
姓名:
李四,抓举成绩108kg,挺举186kg。
姓名:
周五,抓举成绩112kg,挺举190kg。
运行结果如图1所示
图1
实验2统计英文单词
//WordStatistic.java
importjava.io.*;
importjava.util.*;
publicclassWordStatistic{
Vector
Filefile=newFile("english.txt");
Scannersc=null;
Stringregex;
WordStatistic(){
allWord=newVector
noSameWord=newVector
regex="[\\s\\d\\p{Punct}]+";//正则表达式
try{
sc=newScanner(file);
sc.useDelimiter(regex);
}
catch(IOExceptionexp){
System.out.println(exp.toString());
}
}
voidsetFileName(Stringname){
file=newFile(name);
try{
sc=newScanner(file);
sc.useDelimiter(regex);
}
catch(IOExceptionexp){
System.out.println(exp.toString());
}
}
voidWordStatistic(){
try{
while(sc.hasNext()){
Stringword=sc.next();
allWord.add(word);
if(!
noSameWord.contains(word))
noSameWord.add(word);
}
}
catch(Exceptione){}
}
publicVector
returnallWord;
}
publicVector
returnnoSameWord;
}
}
//OutputWordMess.java
importjava.util.*;
publicclassOutputWordMess{
publicstaticvoidmain(String[]args){
Vector
WordStatisticstatistic=newWordStatistic();
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=0;j Strings2=allWord.elementAt(j); if(s1.equals(s2)) count[i]++; } } for(intm=0;m for(intn=m+1;n if(count[n]>count[m]){ Stringtemp=noSameWord.elementAt(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 doublefrequency=(1.0*count[m])/allWord.size(); System.out.printf("%s: %-7.3f",noSameWord.elementAt(m),frequency); } } } 运行结果如图2所示 图2 实验3密码流 //PassWord.java 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; System.out.println("您第"+count+"次输入的密码正确! "); break; }else{ System.out.println("您第"+count+"次输入的密码"+password+"不正确! "); }if(count==3){ System.out.println("您"+count+"次输入的密码都不正确! "); System.exit(0); } } if(success){ Filefile=newFile("score1.txt"); try{ FileReaderinOne=newFileReader(file); BufferedReaderinTow=newBufferedReader(inOne); Strings=null; while((s=inTow.readLine())! =null){ System.out.println(s); } inOne.close(); inTow.close(); }catch(IOExceptionioe){} } } } //score.txt 姓名: 张三,抓举成绩106kg,挺举189kg。 姓名: 李四,抓举成绩108kg,挺举186kg。 姓名: 周五,抓举成绩112kg,挺举190kg。 运行结果如图3所示 图3 4.实验后的练习: 实验1 有如下格式的成绩单(文本格式)score.txt。 姓名: 张三,数学72分,物理67分,英语70分。 姓名: 李四,数学92分,物理98分,英语88分。 姓名: 周五,数学68分,物理80分,英语77分。 要求按行读入取成绩单,并在该行的后面尾加上该同学的总成绩,然后再将该行写入到一个名字为scoreAnalysis.txt的文件中。 //AnalysisResult.java importjava.io.*; importjava.util.*; publicclassAnalysisResult{ publicstaticvoidmain(String[]args){ FilefRead=newFile("score.txt"); FilefWrite=newFile("scoreAnalysis.txt"); try{ Writerout=newFileWriter(fWrite,true); BufferedWriterbufferWrite=newBufferedWriter(out); Readerin=newFileReader(fRead); BufferedReaderbufferRead=newBufferedReader(in); Stringstr=null; while((str=bufferRead.readLine())! =null){ doubletotalScore=Fenxi.getTotalScore(str); str=str+"总分: "+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.*; publicclassFenxi{ publicstaticdoublegetTotalScore(Strings){ Scannerscanner=newScanner(s); scanner.useDelimiter("[^0123456789.]+"); doubletotalScore=0; while(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分。 运行结果如图4所示 图4 实验2 按字典序输出全部不相同的单词。 //Dictionary.java importjava.util.*; publicclassDictionary{ publicstaticvoidmain(Stringargs[]){ Vector WordStatisticstatistic=newWordStatistic(); statistic.setFileName("hello.txt"); statistic.WordStatistic();//statistic调用WordStatistic()方法 allWord=statistic.getAllWord(); noSameWord=statistic.getNoSameWord(); System.out.println("共有"+allWord.size()+"个英文单词"); System.out.println("有"+noSameWord.size()+"个互不相同英文单词"); System.out.println("按字典顺序排列: "); Strings[]=newString[noSameWord.size()]; for(inti=0;i s[i]=noSameWord.elementAt(i); } Arrays.sort(s); for(inti=0;i System.out.println(s[i]+""); } } } 运行结果如图5所示 图5 实验3 编写一个程序,程序运行时,要求用户输入的密码是: hello。 如果用户输入了正确的密码。 程序将输出“你好,欢迎你! ”。 程序允许用户2次输入的密码不正确,一旦超过2次,程序将立刻退出。 //PassWord.java importjava.io.*; importjava.util.Scanner; publicclassPassWord{ publicstaticvoidmain(Stringargs[]){ intcount=0; Consolecons; Stringpasswd; Scannersc=newScanner(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所示 图6 5.实验心得和体会 这次实验中,我感觉比较难理解和掌握的就是Console类了,在实验3密码流的代码在eclipse中运行出错如下图所示: 就是输入不了密码,后来通过找寻解决方法,才知道了在JDK6中java.io.Console类专用来访问基于字符的控制台设备,然后使用cmd命令提示符来运行就可以输入密码和显示结果了。 通过这次实验,大概了解了字符输入、输出流用法,如何去使用Scanner类解析文件,对Console类的使用有个大概的认知。 总而言之,这次实验收获蛮大的,敲代码的效率比以往提高了,出错率也少了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java面向对象程序设计 Java 面向 对象 程序设计 实验 输入输出 复习 课程