程序答题总结.docx
《程序答题总结.docx》由会员分享,可在线阅读,更多相关《程序答题总结.docx(14页珍藏版)》请在冰豆网上搜索。
程序答题总结
实验题4写一程序统计纯文本文件“Early-Precaution.txt”的大写字母、小写字母个数,并将所有小写字母转换为大写字母,输出到result.txt。
代码:
importjava.io.*;
publicclassGetchar{
FileReaderfr;
publicstaticvoidmain(String[]args){
try{
fr=newFileReader("F:
\\Early-Precaution.txt");
Filefile=newFile("F:
\\result.txt");
FileWriterfos=newFileWriter(file);
BufferedReaderbr=newBufferedReader(fr);
BufferedWriterbw=newBufferedWriter(fos);
Stringaline;
intk=0;
intm=0;
while((aline=br.readLine())!
=null)
{
Stringstr=newString(aline);
char[]s=newchar[str.length()];
s=str.toCharArray();
for(inti=0;i{if(s[i]>='a'&&s[i]<='z'){k++;}elseif(s[i]>='A'&&s[i]<='Z'){m++;}}StringSTR=str.toUpperCase();bw.write(STR+"\n");}br.close();bw.close();"小写字母的个数为:");;"大写字母的个数为:");;}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}实验题5对象输入与输出流将Student类的一个实例写到文件中student.txt中,并从student.txt 中读取这个实例,代码:packageobjectobject;importjava.io.*;publicclassReadObject{publicstaticvoidmain(Stringargs[]){Studentstu=null;try{FileInputStreamfi=newFileInputStream("c:\\date.ser");ObjectInputStreamsi=newObjectInputStream(fi);stu=(Student)si.readObject();si.close();"ID:"+stu.id+"name:"+stu.name+"age:"+stu.age+"dept.:"+stu.department);}catch(Exceptione){;}}}packageobjectobject;import;classStudentimplementsSerializable{privatestaticfinallongserialVersionUID=1L;intid;intage;Stringname;Stringdepartment;publicStudent(intid,Stringname,intage,Stringdepartment){this.id=id;this.name=name;this.age=age;this.department=department;}}packageobjectobject;importjava.io.*;publicclassWriteObject{publicstaticvoidmain(Stringargs[]){Studentstu=newStudent(981036,"LiMing",16,"CSD");try{FileOutputStreamfo=newFileOutputStream("c:\\date.ser");ObjectOutputStreamso=newObjectOutputStream(fo);so.writeObject(stu);so.close();}catch(Exceptione){}}}任务一:火车售票假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。代码:publicclassTaskone{publicstaticvoidmain(String[]args){Yxt=newYx();newThread(t,"1").start();newThread(t,"2").start();newThread(t,"3").start();newThread(t,"4").start();newThread(t,"5").start();newThread(t,"6").start();newThread(t,"7").start();newThread(t,"8").start();newThread(t,"9").start();newThread(t,"10").start();}}publicclassYxextendsThread{intticket=200;Stringname="";publicvoidrun(){while(true){synchronized(name){if(ticket<=0)break;"第"+Thread.currentThread().getName()+"售票点卖出第"+ticket--+"张票");try{Thread.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}}}}}任务二:银行存款假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。现有两个顾客,每人都分3次,每次100元将钱到入。试编写一个程序,模拟实际作业。代码:classCBank{privatestaticintsum=0;publicstaticvoidadd(intn){inttmp=sum;tmp=tmp+n;//累加汇款总额try{Thread.sleep((int)(10000*Math.random()));//小睡几秒钟}catch(InterruptedExceptione){}sum=tmp;"sum="+sum);}}classCCustomerextendsThread//CCustomer类,继承自Thread类{publicvoidrun(){//run()methodfor(inti=1;i<=4;i++)CBank.add(1000);//"sum="+CBank);//将1000元分三次汇入}}publicclassbank{publicstaticvoidmain(Stringargs[]){CCustomerc1=newCCustomer();CCustomerc2=newCCustomer();c1.start();c2.start();}}任务三:生产者和消费者问题生产者生产面包,消费者消费面包,“生产”和“消费”各代表一个进程,当生产者没有生产出面包的时候,消费者不能消费面包。当消费者没有消费完面包的时候,生产者不能再生产。代码:packageProduct;publicclassThreadAextendsThread{Waterwater;publicThreadA(WaterwaterArg){water=waterArg;}publicvoidrun(){"开始生产……");for(inti=1;i<=5;i++){//循环5次try{Thread.sleep(1000);//休眠1秒,模拟1分钟的时间+"个");}catch(InterruptedExceptione){e.printStackTrace();}}water.setWater(true);//设置水塘有水状态"生产完毕。");synchronized(water){water.notify();//线程调用notify()方法}}}packageProduct;publicclassThreadBextendsThread{Waterwater;publicThreadB(WaterwaterArg){water=waterArg;}publicvoidrun(){"启动消费");if(water.isEmpty()){//如果水塘无水synchronized(water){//同步代码块try{"还没有生产出面包,等待中……");water.wait();//使线程处于等待状态}catch(InterruptedExceptione){e.printStackTrace();}}}"开始消费……");for(inti=5;i>=1;i--){//循环5侧try{Thread.sleep(1000);//休眠1秒,模拟1分钟+"个");}catch(InterruptedExceptione){e.printStackTrace();}}water.setWater(false);//设置水塘无水状态"消费完毕。");}}任务一:InetAddress类练习使用InetAddress类的方法获取;获取本地机的名称和IP地址。代码:packageLab8;import;publicclassInetAddressDemo{publicstaticvoidmain(String[]args)throwsException{InetAddresslocAdd=null;InetAddresspku=null;locAdd=InetAddress.getLocalHost();//得到本机;pku=InetAddress.getByName("");"学校IP地址:"+pku.getHostAddress());"本机的IP地址:"+locAdd.getHostAddress());"本机的名称"+locAdd.getHostName());}}任务二:Socket类和ServerSocket类练习:利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。客户端向服务器端发送“Time”命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送“Exit”命令,服务器端向客户端返回“Bye”后退出。代码:packageLab8;importjava.io.*;import.*;importjava.util.*;publicclassServerimplementsRunnable{publicServerSocketss;publicSockets;publicInputStreamis;publicOutputStreamos;publicServer(){"服务器已启动!");try{ss=newServerSocket(8002);s=ss.accept();is=s.getInputStream();os=s.getOutputStream();Threadt=newThread(this);t.start();while(true){Scannera=newScanner(System.in);Stringb=a.next();os.write(b.getBytes());}}catch(IOExceptione){e.printStackTrace();}}publicvoidrun(){while(true){try{while(s.isConnected()){Thread.sleep(50);bytebuy[]=newbyte[100];intlen;len=is.read(buy);Stringstring=newString(buy,0,len);if(string.equals("Time")){Calendarc=Calendar.getInstance();Stringstr="现在时间是:"+c.get(Calendar.HOUR_OF_DAY)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND);;os.write(str.getBytes());}elseif(string.equals("Exit")){os.write("Bye!".getBytes());os.flush();"连接已经断开!");System.exit(0);}else{;}}is.close();os.close();s.close();ss.close();}catch(Exceptione){e.printStackTrace();}}}publicstaticvoidmain(String[]args){newServer();}}任务三:DatagramSocket类和DatagramPacket类练习编写一个数据报通信程序,实现简单的聊天功能。基本要求:两人一组编写完整程序。为了给大家减轻负担,Swing部分的代码已给出。(请同学们到作业管理系统下载Lab8.zip中的UDPmessage.java)代码:任务四:传输对象输入与输出流现有一个Student类,程序实现:从服务器端传输一个Student对象到客户端,基本要求:使用Socket类和ServerSocket类实现。代码:packageLab8;import;import;import;import;import;publicclassObjectServer{publicstaticvoidmain(String[]args){ServerSocketserver=null;Sockets=null;OutputStreamops=null;ObjectOutputStreamoos=null;Studentstu=newStudent(10090,"小明",20);try{server=newServerSocket(9001);s=server.accept();ops=s.getOutputStream();oos=newObjectOutputStream(ops);oos.writeObject(stu);oos.close();s.close();server.close();}catch(IOExceptione){e.printStackTrace();}}}
if(s[i]>='a'&&s[i]<='z')
k++;
}
elseif(s[i]>='A'&&s[i]<='Z')
m++;
StringSTR=str.toUpperCase();
bw.write(STR+"\n");
br.close();
bw.close();
"小写字母的个数为:
");
;
"大写字母的个数为:
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
实验题5对象输入与输出流
将Student类的一个实例写到文件中student.txt中,并从student.txt 中读取这个实例,
packageobjectobject;
publicclassReadObject{
publicstaticvoidmain(Stringargs[]){
Studentstu=null;
FileInputStreamfi=newFileInputStream("c:
\\date.ser");
ObjectInputStreamsi=newObjectInputStream(fi);
stu=(Student)si.readObject();
si.close();
"ID:
"+stu.id+"name:
"+
stu.name+"age:
"+stu.age+"dept.:
"+stu.department);
}catch(Exceptione){
;}
import;
classStudentimplementsSerializable{
privatestaticfinallongserialVersionUID=1L;
intid;
intage;
Stringname;
Stringdepartment;
publicStudent(intid,Stringname,intage,Stringdepartment){
this.id=id;
this.name=name;
this.age=age;
this.department=department;
publicclassWriteObject{
Studentstu=newStudent(981036,"LiMing",16,"CSD");
FileOutputStreamfo=newFileOutputStream("c:
ObjectOutputStreamso=newObjectOutputStream(fo);
so.writeObject(stu);
so.close();
}catch(Exceptione){}
任务一:
火车售票
假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。
打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。
publicclassTaskone{
Yxt=newYx();
newThread(t,"1").start();
newThread(t,"2").start();
newThread(t,"3").start();
newThread(t,"4").start();
newThread(t,"5").start();
newThread(t,"6").start();
newThread(t,"7").start();
newThread(t,"8").start();
newThread(t,"9").start();
newThread(t,"10").start();
publicclassYxextendsThread{
intticket=200;
Stringname="";
publicvoidrun(){
while(true){
synchronized(name){
if(ticket<=0)
break;
"第"+Thread.currentThread().getName()
+"售票点卖出第"+ticket--+"张票");
Thread.sleep(100);
}catch(InterruptedExceptione){
任务二:
银行存款
假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。
现有两个顾客,每人都分3次,每次100元将钱到入。
试编写一个程序,模拟实际作业。
classCBank
privatestaticintsum=0;
publicstaticvoidadd(intn){
inttmp=sum;
tmp=tmp+n;//累加汇款总额
Thread.sleep((int)(10000*Math.random()));//小睡几秒钟
catch(InterruptedExceptione){}
sum=tmp;
"sum="+sum);
classCCustomerextendsThread//CCustomer类,继承自Thread类
publicvoidrun(){//run()method
for(inti=1;i<=4;i++)
CBank.add(1000);
//"sum="+CBank);//将1000元分三次汇入
publicclassbank
publicstaticvoidmain(Stringargs[])
CCustomerc1=newCCustomer();
CCustomerc2=newCCustomer();
c1.start();
c2.start();
任务三:
生产者和消费者问题
生产者生产面包,消费者消费面包,“生产”和“消费”各代表一个进程,当生产者没有生产出面包的时候,消费者不能消费面包。
当消费者没有消费完面包的时候,生产者不能再生产。
packageProduct;
publicclassThreadAextendsThread{
Waterwater;
publicThreadA(WaterwaterArg){
water=waterArg;
"开始生产……");
for(inti=1;i<=5;i++){//循环5次
Thread.sleep(1000);//休眠1秒,模拟1分钟的时间
+"个");
water.setWater(true);//设置水塘有水状态
"生产完毕。
synchronized(water){
water.notify();//线程调用notify()方法
publicclassThreadBextendsThread{
publicThreadB(WaterwaterArg){
"启动消费");
if(water.isEmpty()){//如果水塘无水
synchronized(water){//同步代码块
"还没有生产出面包,等待中……");
water.wait();//使线程处于等待状态
"开始消费……");
for(inti=5;i>=1;i--){//循环5侧
Thread.sleep(1000);//休眠1秒,模拟1分钟
water.setWater(false);//设置水塘无水状态
"消费完毕。
InetAddress类练习
使用InetAddress类的方法获取;获取本地机的名称和IP地址。
packageLab8;
publicclassInetAddressDemo{
publicstaticvoidmain(String[]args)throwsException{
InetAddresslocAdd=null;
InetAddresspku=null;
locAdd=InetAddress.getLocalHost();//得到本机
pku=InetAddress.getByName("");
"学校IP地址:
"+pku.getHostAddress());
"本机的IP地址:
"+locAdd.getHostAddress());
"本机的名称"+locAdd.getHostName());
Socket类和ServerSocket类练习:
利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。
客户端向服务器端发送“Time”命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送“Exit”命令,服务器端向客户端返回“Bye”后退出。
import.*;
importjava.util.*;
publicclassServerimplementsRunnable{
publicServerSocketss;
publicSockets;
publicInputStreamis;
publicOutputStreamos;
publicServer(){
"服务器已启动!
ss=newServerSocket(8002);
s=ss.accept();
is=s.getInputStream();
os=s.getOutputStream();
Threadt=newThread(this);
t.start();
Scannera=newScanner(System.in);
Stringb=a.next();
os.write(b.getBytes());
while(s.isConnected()){
Thread.sleep(50);
bytebuy[]=newbyte[100];
intlen;
len=is.read(buy);
Stringstring=newString(buy,0,len);
if(string.equals("Time")){
Calendarc=Calendar.getInstance();
Stringstr="现在时间是:
"+c.get(Calendar.HOUR_OF_DAY)+":
"+c.get(Calendar.MINUTE)+":
"+c.get(Calendar.SECOND);
os.write(str.getBytes());
elseif(string.equals("Exit")){
os.write("Bye!
".getBytes());
os.flush();
"连接已经断开!
System.exit(0);
else{
is.close();
os.close();
s.close();
ss.close();
newServer();
DatagramSocket类和DatagramPacket类练习
编写一个数据报通信程序,实现简单的聊天功能。
基本要求:
两人一组编写完整程序。
为了给大家减轻负担,Swing部分的代码已给出。
(请同学们到作业管理系统下载Lab8.zip中的UDPmessage.java)
任务四:
传输对象输入与输出流
现有一个Student类,程序实现:
从服务器端传输一个Student对象到客户端,基本要求:
使用Socket类和ServerSocket类实现。
publicclassObjectServer{
ServerSocketserver=null;
Sockets=null;
OutputStreamops=null;
ObjectOutputStreamoos=null;
Studentstu=newStudent(10090,"小明",20);
server=newServerSocket(9001);
s=server.accept();
ops=s.getOutputStream();
oos=newObjectOutputStream(ops);
oos.writeObject(stu);
oos.close();
server.close();
catch(IOExceptione){
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1