老师,这个假设修正法,我可以理解为开始假设是对的,接下来把所有错的列出来吗
这个copyOf方法返回的是新的数组还是就是在原来的数组上扩容
/** * 创建发送消息类 */ class ClientSend extends Thread { private Socket socket; public ClientSend(Socket socket){ this.socket = socket; } @Override public void run() { this.sendMsg(); } /** * 发送消息 */ private void sendMsg(){ Scanner scanner = null; PrintWriter pw = null; try { //键盘输入 scanner = new Scanner(System.in); //创建向对方输出消息的流对象 pw = new PrintWriter(this.socket.getOutputStream()); while (true){ String msg = scanner.nextLine(); if ("exit".equals(msg)){ break; } pw.println(msg); pw.flush(); } } catch (IOException e) { e.printStackTrace(); }finally { if (pw != null){ pw.close(); } if (scanner != null){ scanner.close(); } if(this.socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } /** * 创建接收消息线程类 */ class ClientReceive extends Thread { private Socket socket; public ClientReceive(Socket socket){ this.socket = socket; } @Override public void run() { } /** * 接收消息的方法 */ private void receiveMsg(){ BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); while (true){ String msg = br.readLine(); System.out.println("他说: " +msg ); } } catch (IOException e) { e.printStackTrace(); }finally { if (br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public class PointSocketClient { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1",8888); System.out.println("连接成功"); new ClientSend(socket).start(); new ClientReceive(socket).start(); } catch (IOException e) { e.printStackTrace(); } } }
/** * 创建发送消息类 */ class Send extends Thread{ private Socket socket; public Send(Socket socket){ this.socket = socket; } @Override public void run() { this.sendMsg(); } /** * 发送消息 */ private void sendMsg(){ Scanner scanner = null; PrintWriter pw = null; try { //键盘输入 scanner = new Scanner(System.in); //创建向对方输出消息的流对象 pw = new PrintWriter(this.socket.getOutputStream()); while (true){ String msg = scanner.nextLine(); if ("exit".equals(msg)){ break; } pw.println(msg); pw.flush(); } } catch (IOException e) { e.printStackTrace(); }finally { if (pw != null){ pw.close(); } if (scanner != null){ scanner.close(); } if(this.socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } /** * 创建接收消息线程类 */ class Receive extends Thread{ private Socket socket; public Receive(Socket socket){ this.socket = socket; } @Override public void run() { this.receiveMsg(); } /** * 接收消息的方法 */ private void receiveMsg(){ BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); while (true){ String msg = br.readLine(); System.out.println("他说: " +msg ); } } catch (IOException e) { e.printStackTrace(); }finally { if (br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public class PointSocketServer { public static void main(String[] args) { ServerSocket serverSocket = null; try { serverSocket =new ServerSocket(8888); System.out.println("服务器启动等待连接....."); Socket socket = serverSocket.accept(); System.out.println("连接成功"); new Send(socket).start(); new Receive(socket).start(); } catch (Exception e) { e.printStackTrace(); }finally { if (serverSocket != null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
老师我这个代码只有客户端给服务端发消息的收回会输出
服务端给客户端发消息时没有反应,麻烦老师看下
package com.baizhan.test; public class MyDoubleLinkedList <E>implements MyList<E> { class Node<E>{ E item; Node<E> prev; //记录前一个节点对象 Node<E> next; //记录下一个节点对象 public Node(E item, Node<E> prev, Node<E> next) { this.item = item; this.prev = prev; this.next = next; } } private Node head; private Node tail; private int size; @Override public void add(E element) { linkLast(element); } private void linkLast(E element){ Node t=this.tail; //获取尾节点 Node<E> node=new Node<>(element,t,null); //创建节点 //将新节点定义为尾节点 this.tail=node; if(t==null){ this.head=node; }else{ t.next=node; } size++; } @Override public E get(int index) { chickIndex(index); Node<E> node =getNode(index); return node.item; } private void chickIndex(int index){ if (!(index>0 && index<size)) { throw new IndexOutOfBoundsException("Index:"+index+"size:"+size); } } private Node getNode(int index){ if(index<(this.size >>1)){ Node node=this.head; for(int i=0;i<index;i++){ node=node.next; } return node; }else{ Node node=tail; for(int i=size-1;i>index;i--){ node=node.prev; } return node; } } @Override public int size() { return size; } @Override public E remove(int index) { chickIndex(index); Node<E> node =getNode(index); E item=node.item; if(node.prev==null){ this.head=node.next; }else{ node.prev.next=node.next; } if(node.next==null){ tail=node.prev; } else { node.next.prev=node.prev; } node.prev=null; node.item=null; node.next=null; size--; return item; } public static void main(String[] args) { MyDoubleLinkedList<String > m=new MyDoubleLinkedList<>(); m.add("74"); m.add("11"); m.add("215"); m.add("237"); m.add("lierqing"); m.add("127"); System.out.println(m.size); System.out.println(m.size()); System.out.println(m.remove(0)); System.out.println(m.size); for(int i=0;i<m.size;i++){ System.out.println(m.get(i)); } } }
老师,最后为啥会出现异常啊,我找了半天没看明白
package com.baizhan.test; public class MuLinkedList1<E> implements MyList<E>{ class Node<E>{ E item; Node next; public Node(E item, Node next) { this.item = item; this.next = next; } } private Node head; private int size; @Override public void add(E element) { Node<E> node=new Node<>(element,null) ; Node tail=getTail(); if(tail==null){ head=node; }else{ tail.next=node; } size++; } private Node getTail(){ if(this.head==null){ return null; }else{ Node node=head; for(int i=0;i<size-1;i++){ if(node.next==null) break; node=node.next; } return node; } } @Override public E get(int index) { chickIndex(index); Node<E> node=getNode(index); return node.item; } public void chickIndex(int index){ if(!(index>0&&index<size)) { throw new IndexOutOfBoundsException("Index:"+index+"size"+size); } } private Node getNode(int index){ Node<E> node=head; for(int i=0;i<index;i++){ node=node.next; } return node; } @Override public int size() { return size; } @Override public E remove(int index) { chickIndex(index); Node<E> node=this.getNode(index); E item=node.item; if(this.head==node){ this.head=node.next; }else{ Node<E> temp=head; for(int i=0;i<index-1;i++){ temp=temp.next; } temp.next=node.next; node.next = null; } this.size--; return item; } public static void main(String[] args) { MuLinkedList1<String> my=new MuLinkedList1<>(); my.add("aaa"); my.add("bbb"); my.add("ccc"); my.add("ddd"); my.add("eee"); my.add("fff"); System.out.println(my.size); System.out.println(my.remove(4)); for(String a:my){ } } }
老师,为啥for each循环会出错
package com.baizhan.test; public class MuLinkedList1<E> implements MyList<E>{ class Node<E>{ E item; Node next; public Node(E item, Node next) { this.item = item; this.next = next; } } private Node head; private int size; @Override public void add(E element) { Node<E> node=new Node<>(element,null) ; Node tail=getTail(); if(tail==null){ head=node; }else{ tail.next=node; } size++; } private Node getTail(){ if(this.head==null){ return null; }else{ Node node=head; for(int i=0;i<size-1;i++){ if(node.next==null) break; node=node.next; } return node; } } @Override public E get(int index) { chickIndex(index); Node<E> node=getNode(index); return node.item; } public void chickIndex(int index){ if(!(index>0&&index<size)) { throw new IndexOutOfBoundsException("Index:"+index+"size"+size); } } private Node getNode(int index){ Node<E> node=head; for(int i=0;i<index;i++){ node=node.next; } return node; } @Override public int size() { return size; } @Override public E remove(int index) { chickIndex(index); Node<E> node=this.getNode(index); E item=node.item; if(this.head==node){ this.head==node.next; }else{ Node<E> temp=head; for(int i=0;i<index-1;i++){ temp=temp.next; } temp.next=node.next; node.next == null; } this.size--; return item; } }
老师,这两个地方为啥会报错
那如果通过命令行执行程序要怎么给定args
老师,赋值不是等号右边赋给左边吗,左边也可以赋给右边吗
MyInteger b =MyInteger. valueOf(100);
老师这个MyInteger.valueOf 是什么意思,方法的调用吗,还是什么别的固定写法。
老师,这个循环要执行index-1次,如果被删除的的元素在循环次数的中间,怎么办,还有这个循环最后得到的不是最后一个数吗,咋又成了被删除的前一个数,好乱
为什么这段代码会有两个return,如果多个return不是只执行一个吗?这样写的话就会执行两个return啊
老师,return返回一个值,是将这个值返回到哪里呢
老师,在判断为空的方法里为什么不加if条件判断
老师 能不能全部都按照String类型传输
在服务端去做String到基本数据类型的转换啊
可以少开好几个IO流了
服务端:
import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDP_basicDataServer { public static void main(String[] args) { try(DatagramSocket datagramSocket=new DatagramSocket(9999)) { byte[] bytes=new byte[1024]; DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length); datagramSocket.receive(datagramPacket); byte[] data = datagramPacket.getData(); String dataReceive=new String(data,0,datagramPacket.getLength()); System.out.println("String:"+dataReceive); System.out.println(Long.parseLong(dataReceive)); } catch (Exception e) { e.printStackTrace(); } } }
客户端:
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; public class UDP_basicDataClient { public static void main(String[] args) { //消息需要进行类型转换,转换为字节数组类型 long n=2000L; byte[] bytes =String.valueOf(n).getBytes(); //创建数据报包 DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length,new InetSocketAddress("127.0.0.1",9999)); //创建数据发送对象,指定发送端口 //端口是基于本机的,这里和TCP协议有所不同 try(DatagramSocket datagramSocket=new DatagramSocket(9090)){ datagramSocket.send(datagramPacket); }catch (Exception e){ e.printStackTrace(); } } }
上边的那个是我眼看花了 没有问题了
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637