2. 对比Java提供的Stack, 两者有啥区别 3. 使用Stack栈实现\行编辑器\
设立一个输入行冲区, 接受用户逐行的输入, 处理后回显正确的信息
逐行处理过程如下:
有两个特殊字符用来修改该行的错误信息, '#'表示之前一个字符错误, 请删除, '@'表示之前字符全部错误, 请删除前面的全部
示例:
whli##ilr#e(s#*s) -> while(*s)
outcha@putchar(*s=#++); -> putchar(*s++);
MyStack.java package mystack;
/**
* @author 电子商务一班 俞国峰 200930671251 */
public class MyStack {
//currentSize用来记录当前栈中元素个数 private int currentSize; private Object[] Mylist;
//构造函数,创建空栈 public MyStack() {
Mylist = new Object[10]; currentSize = 0;
}
//当数组长度不够时,增加数组长度(每次增加一倍) public void enLargeSize() { }
Object[] tempList = new Object[Mylist.length * 2];
System.arraycopy(Mylist, 0, tempList, 0, Mylist.length); Mylist = tempList;
//判断栈是否为空
public boolean empty() { }
return currentSize == 0;
//入栈
public void push(Object o) { if (currentSize >= Mylist.length) { enLargeSize(); } }
//出栈,返回栈顶元素 public Object pop() { }
//获取栈顶元素
public Object peek() { if (currentSize == 0) { }
}
return null; if (currentSize == 0) { return null; }
currentSize--;
if (currentSize + 1 >= Mylist.length) { enLargeSize(); }
return Mylist[currentSize + 1]; Mylist[currentSize] = new Object(); Mylist[currentSize] = o; currentSize++;
return Mylist[currentSize - 1];
//获取栈大小,返回栈中元素个数 public int getSize() { }
return currentSize;
//清空栈
public void clearAll() { }
//重载toString(),以字符串形式返回栈中元素 @Override
public String toString() {
Mylist = new Object[10]; currentSize = 0;
}
}
String tempString = \
for (int i = 0; i < currentSize; i++) { tempString += Mylist[i].toString(); }
return tempString;
testMyStack.java package mystack;
/**
* @author 电子商务一班 俞国峰 200930671251 */
import java.util.*;
public class testMyStack {
public static void main(String[] args) {
MyStack msk = new MyStack();
Scanner sc = new Scanner(System.in); String input = \
System.out.println(\
\\nYou
may
enter
in:
enter 'exit' or 'EXIT' to exit!\ System.out.println(\example: outcha@putchar(*s=#++);\
System.out.println(\
while (!(input = sc.next()).equalsIgnoreCase(\ char[] charr = input.toCharArray();
System.out.print(\
for (int i = 0; i < charr.length; i++) {
System.out.print(charr[i]); switch (charr[i]) { case '#':
msk.pop(); break;
case '@': msk.clearAll(); break;
}
}
}
}
}
default :
msk.push(charr[i]); break;
System.out.println(\
System.out.print(\
homework11 多线程和网络通信 2011-05-07 21:59
1. 实现UDP模式的客户端和服务器端通信
2. 使用两个线程: 一个线程负责发送消息, 一个线程负责收取并发送消息,两线程间使用LinkedList共享数据
Server.java
package _yu_guo_feng; /*
* @author 电子商务一班 俞国峰 200930671251 *
* 功能:c/s结构,实现基于UDP的聊天功能(包括用户上线提醒,群聊,私聊) * 说明:先开启服务器,再接入客户端(可接入1至多个) * 未完善:服务器多开异常处理,下线提醒 */
import java.awt.*; import javax.swing.*; import java.io.*; import java.net.*;
import java.text.*; import java.util.*;
public class Server extends JFrame {
private static final long serialVersionUID = 3497147855119919874L; private JTextArea jta; //保存当前用户
private LinkedList
private DatagramSocket socket;
private DatagramPacket sendPacket, recevicedPacket; private byte[] buf;
//日期处理
private SimpleDateFormat sdf;
public static void main(String[] args) { }
new Server();
public Server() {
String
introduction
QQ 730
=
寝室版
\ + \欢迎使用 腾讯=================\\n\
+ \+ \使用说明:\\n\+ \运行服务器\\n\+ \接入客户端(可接入多个)\\n\
+ \功能:上线提醒、群聊和私聊\\n\ + \作者:电子商务一班——俞国峰——200930671251========\\n\ + \
try {
socket = new DatagramSocket(8888); } catch (SocketException e) { e.printStackTrace();
jta = new JTextArea(introduction);
this.setIconImage((new ImageIcon(\this.setTitle(\腾讯QQ 730寝室版——服务器\this.add(jta, BorderLayout.CENTER); this.setSize(400, 300); this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setVisible(true);
sclient = new LinkedList
sdf = new SimpleDateFormat(\