Java程序设计教程(第2版)课后习题及答案14课后习题.docx
-
资源ID:95564010
资源大小:14.87KB
全文页数:7页
- 资源格式: DOCX
下载积分:15金币
快捷下载

会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
Java程序设计教程(第2版)课后习题及答案14课后习题.docx
第14章课后习题参考答案1 .网络通信协议有哪两种?答:TCP 和 UDP。2 . 一个URL包括哪些内容?答:一个完整的URL包括:协议名:主机地址:端口号/资源路径/资源对象3 . ServerSocket进行服务器端编程时,主要分为哪几个步骤?答:首先创建一个绑定端口的服务器端socket;然后调用accept。方法监听来自于客户端的连接; 连接成功后进行数据交换;交换完毕关闭网络连接。4 .参照例14.5,编写程序,实现带括号的四则运算。参考代码:客户端:import java.io.*;.*;import java.utiL*;public class chapl4_4_clientipublic static void main(String args) (Scanner scanner = new Scanner(System.in);String input=null;Socket socket=null;DatalnputStream in=null;DataOutputStream out=null;String server!P=H 127.0.0.1M; 服务器地址int port=5050; 服务器端 口trysocket=new Socket(serverIP,port);连接服务器in=new DataInputStream(socket.getInputStream();仓建输入流out=new DataOutputStream(socket.getOutputStream();创建输出流 System.out.printin("请输入一个正整数的四则运算表达式:”);while(scanner.hasNext() (input=scanner.nextLine();从键盘输入一个待计算的四则运算表达式 if (!input.equals(nOn) (out.writeUTF(input);/向服务器端发送运算请求 String result=in.readUTF();等待读取运算结果276System.out.printin("服务器返回的计算结果:H+result);System.out.printin("请输入一个正整数的四则运算表达式(输入0退出):”);elsebreak; 请求结束)catch(Exception e)(System. out. printing与服务器连接中断)finally(try/关闭网络连接(in.close();out.close();socket.close();System, out. printin("连接结束)catch(Exception e)服务器端:import java.io.*;.*;public class chap 14_4_server(public static void main(String args)ServerSocket server_socket=null;Socket socket=null;int port=5050;while(true)tryserver_socket=new ServerSocket(port);System.out.printin("服务器启动! n);)catch(IOException el)System.out.printin("正在监听)/ServerSocket对象不能重复创建trySystem, out. printin("等待客户请求)socket=server_socket.accept();System.out. printing 客户的地址:”+socket.getInetAddress()+”:"+socket.getPort();)catch (lOException e)System, out. printin("正在等待客户”); )if(socket!=null)new chap 14_4_thread(socket); 为每个客户启动一个专门的线程 )多线程处理端:import java.io.DatalnputStream;import java.io.DataOutputStream;import j . Socket;import java.utiLLinkedList;public class chapl4_4_thread extends ThreadSocket socket=null;DatalnputStream in=null;DataOutputStream out=null;String str;String response;String ip;int port;public chap 14_4_thread(Socket socket) (this. socket=socket;start();)public void run()in=new DataInputStream(socket.getInputStream();仓ll建输入前i out=new DataOutputStream(socket.getOutputStream();创建输出流 ip=socket.getInetAddress().getHostAddress();/§>l±I IP 地址 port=socket.getPort(); 客户端的端口号while (true) (strain. readUTF();获取客户端的表达式System.out.println("客户端”+ip+”:”+port+”发送的请求内容:“System.out.println(str+n=?n);if (str.equals(nOn)(System, out. printin("连接结束"); break;) else (calculate expression = new calculate(str+n#n); expression.solve();response = expression.operate();out.writeUTF(response);/响应计算结果)catch(Exception e)(System, out. printin("连接结束)finallytryin.close(); out.close(); socket.close(); catch(Exception e) )class calculate LinkedList<Character> stack = new LinkedList(); char a=new char100;char b=new char100;/ 后缀表达式 public calculate(String in)this.a = in.toCharArray();public int priority(char operator) switch (operator) /运算符优先级casereturn 1;casereturn 1;casereturn 2;casereturn 2;casereturn 0;default:return -1;)public void solve。字符串解析 stack, push。#');int la = a.length;intj = 0;boolean flag = true;有数字fbr(int i = 0;i < la;i+)if(ai >= O && ai <= 9 | ai = ?)bj+ = ai; flag = true;)else if(ai ='(') stack.push(ai);else if(ai =')')ifi(flag = true)bU+=''; flag = folse;)while(stack.peek() !-(*) bj+=stack.peek(); stack.pop(); stack.pop();else(if(flag = true) bj+="; flag = false;)while( priority(stack.peek() >= priority(ai) && stack.peek() != '#')bj+ = stack.peek(); stack.pop();stack.push(ai);)while(stack.peek() !='#')b|j+ = stack.peek();stack.popQ;)bj = V;public String operate() double res = 0;double sum = 0;int position = 0;boolean xiaoshu = false;double dianwei = 0.1;LinkedList<Double> stack_operate = new LinkedList<Double>(); while(bposition !=,nf)if(bposition >=&& bposition <-91)if(xiaoshu = folse) res = res*10+bposition,0'elseres = res+dianwei*(bposition-fO,);dianwei = dianwei *0.1;)else ififbposition = 7)xiaoshu = true;)else if(bposition = ! *)xiaoshu = false;dianwei = 0.1;if(res != 0)stackoperate.push(res);res = 0;)else(double xl = stack_operate.peek();stack_operate.pop();double x2 = stack_operate.peek();stack_operate.pop();if(bposition=中)sum = xl+x2;else if(bposition = sum = x2-xl;else if(bposition=阳)sum = x2*xl;else if (bfpositionl = '+') sum = x2/xl;stack_operate.push(sum);res = 0;)position+;return String.valueOf(sum);