1.3.44文本编辑器的缓冲区。为文本编辑器的缓冲区设计一种数据类型并实现表1.3.13中的API.
表1.3.13文本缓冲区的API:
public class Buffer
Buffer//创建一块空缓冲区
void insert(char c)//光标位置插入字符c
char delete()//删除并返回光标位置的字符
void left(int k)//将光标向左移动k个位置
void right(int k)//将光标向右移动k个位置
int size()//缓冲区中的字符数量
提示:使用两个栈。
答:
public class Buffer
{
private Stack<Character> stackMain;
private Stack<Character> stackAssist;
public Buffer()
{
stackMain=new Stack<Character>();
stackAssist=new Stack<Character>();
}
public void insert(char c)
{
stackMain.push(c);
}
public char delete()
{
return stackMain.pop();
}
public void left(int k)
{
while(k>0)
{
stackAssist.push(stackMain.pop());
k--;
}
}
public void right(int k)
{
while(k>0)
{
stackMain.push(stackAssist.pop());
k--;
}
}
public int size()
{
return stackMain.size()+stackAssist.size();
}
public void showSize()
{
StdOut.println("StackMain size="+stackMain.size());
StdOut.println("StackAssist size="+stackAssist.size());
}
public void showAll()
{
StdOut.println("StackMain is:");
for(Character i:stackMain)
StdOut.print(i);
//
StdOut.println();
StdOut.println("StackAssist is:");
for(Character i:stackAssist)
StdOut.print(i);
}
public static void main(String[] args)
{
Buffer b=new Buffer();
while(!StdIn.isEmpty())
{
char item=StdIn.readChar();
b.insert(item);
}
//
b.showSize();
StdOut.println("Buffer is:");
b.showAll();
//
StdOut.println("-------");
b.left(2);
b.showSize();
StdOut.println("after Buffer left 2,Buffer is:");
b.showAll();
//
StdOut.println("-------");
b.right(2);
b.showSize();
StdOut.println("after Buffer right 2,Buffer is:");
b.showAll();
}
}
表1.3.13文本缓冲区的API:
public class Buffer
Buffer//创建一块空缓冲区
void insert(char c)//光标位置插入字符c
char delete()//删除并返回光标位置的字符
void left(int k)//将光标向左移动k个位置
void right(int k)//将光标向右移动k个位置
int size()//缓冲区中的字符数量
提示:使用两个栈。
答:
public class Buffer
{
private Stack<Character> stackMain;
private Stack<Character> stackAssist;
public Buffer()
{
stackMain=new Stack<Character>();
stackAssist=new Stack<Character>();
}
public void insert(char c)
{
stackMain.push(c);
}
public char delete()
{
return stackMain.pop();
}
public void left(int k)
{
while(k>0)
{
stackAssist.push(stackMain.pop());
k--;
}
}
public void right(int k)
{
while(k>0)
{
stackMain.push(stackAssist.pop());
k--;
}
}
public int size()
{
return stackMain.size()+stackAssist.size();
}
public void showSize()
{
StdOut.println("StackMain size="+stackMain.size());
StdOut.println("StackAssist size="+stackAssist.size());
}
public void showAll()
{
StdOut.println("StackMain is:");
for(Character i:stackMain)
StdOut.print(i);
//
StdOut.println();
StdOut.println("StackAssist is:");
for(Character i:stackAssist)
StdOut.print(i);
}
public static void main(String[] args)
{
Buffer b=new Buffer();
while(!StdIn.isEmpty())
{
char item=StdIn.readChar();
b.insert(item);
}
//
b.showSize();
StdOut.println("Buffer is:");
b.showAll();
//
StdOut.println("-------");
b.left(2);
b.showSize();
StdOut.println("after Buffer left 2,Buffer is:");
b.showAll();
//
StdOut.println("-------");
b.right(2);
b.showSize();
StdOut.println("after Buffer right 2,Buffer is:");
b.showAll();
}
}