stack.clear();这里出现的错误
import static org.junit.Assert.*;
import junit.framework.TestCase;
import org.junit.Test;
public class StackTest extends TestCase { private SelfDefinedStack stack_test;
public void Test()
{
stack_test = new SelfDefinedStack();
testsize();
testclear();
testpush();
testtop();
testpop();
}
/**
* Test of size() method of class SelfDefinedStack
* This method will push an element into the stack and verify that the stack size will
* increase by 1
*/
public void testsize()
{
int count = 0;
count = stack_test.size();
System.out.println("size of the stack is "+count);
stack_test.push("test_stack1");
int newcount = stack_test.size();
System.out.println("size of the stack is "+newcount);
if(newcount != count+1)
{
System.out.println("sizetest failed");
}
else
{
System.out.println("sizetest passed");
}
}
/**
* Test of push() method of class SelfDefinedStack
* This method will push an element into the stack and verify that the stack size will
* increase by 1
*/
public void testpush()
{
stack_test.clear();
if(stack_test.size() != 0)
{
System.out.println("testpush() failed on size");
}
else
{
stack_test.push("test_stack2");
if(stack_test.size() != 1)
{
System.out.println("testpush() failed");
}
else
{
System.out.println("testpush() passed");
}
}
}
/**
* Test of pop() method of class SelfDefinedStack
* This method will pop out the element on the top of the stack and verify the returned item
*/
public void testpop()
{
stack_test.clear();
if(stack_test.size() != 0)
{
System.out.println("testpop() failed on size");
}
else
{
stack_test.push("test_stack3");
if(stack_test.size() != 1)
{
System.out.println("testpush() failed");
}
String popElem = stack_test.pop().toString();
if(popElem == null)
{
System.out.println("testtop() failed: return element is null");
}
else if (popElem != "test_stack3")
{
System.out.println("testpop() failed wrong element returned ");
}
else if(stack_test.size() != 0)
{
System.out.println("testpop() failed: size is not 0");
}
System.out.println("testpop() passed");
}
}
/**
* Test of top() method of class SelfDefinedStack
* This method will verify that the element on the top of the stack will be retrieved and the
* stack won't change
*/
public void testtop()
{
stack_test.clear();
if(stack_test.size() != 0)
{
System.out.println("testtop() failed on size");
}
else
{
stack_test.push("test_stack4");
stack_test.push("test_stack5");
String topElem = stack_test.top().toString();
if(stack_test.size() != 2)
{
System.out.println("testtop() failed on size");
}
else if(topElem == null)
{
System.out.println("testtop() failed: Element topped from stack is null");
}
else if(!topElem.equals("test_stack5"))
{
System.out.println("testtop() failed: Element topped is not the first element of the stack");
}
else
System.out.println("testtop() passed");
}
}
/**
* Test of clear() method of class SelfDefinedStack
* This method will verify that all elements in the stack have been removed
*/
public void testclear()
{
stack_test.push("test_stack6");
if(stack_test.size() <= 0)
{
System.out.println("testclear() failed on push");
}
else
{
stack_test.clear();
if(stack_test.size() != 0)
{
System.out.println("testclear() failed");
}
else
System.out.println("testclear() passed");
}
}
}
以上是测试类
以下是实现的简单堆栈功能
import java.util.LinkedList;
/**
* This class
* @author shiyucai
*
*/
public class SelfDefinedStack implements Stack{ /**
*
*/
@Override
public void push(Object obj) {
assert obj!=null;
assert wellformed();
num++;
list.addFirst(obj);
}
/**
*
*/
@Override
public Object pop() {
// TODO Auto-generated method stub
assert wellformed();
return list.pollFirst();
}
/**
*
*/
@Override
public int size() {
// TODO Auto-generated method stub
assert wellformed();
return list.size();
}
/**
*
*/
@Override
public Object top() {
// TODO Auto-generated method stub
assert wellformed();
if(num!=0)
return list.getFirst();
else
return "empty stack";
}
public void clear() {
list = new LinkedList<Object>();
num = 0;
}
public boolean isEmpty() {return list.isEmpty();}
protected boolean wellformed(){ if (this.size() < 0 || this.size() > num) {
return false;
}
return true;
}
public String Link()
{
LinkedList<Object> lnk = new LinkedList<Object>();
if(num >= 1)
{
lnk = list;
}
else
{
return "Empty Stack";
}
return lnk.toString();
}
private LinkedList<Object> list = new LinkedList<Object>();
private int num = 0;
}
public interface Stack
{
public void push(Object obj);
public Object pop();
public int size();
public Object top();
}import javax.swing.JApplet;
public class StackJApplet extends JApplet implements ActionListener{
public StackJApplet() {
}
Toolkit kit = Toolkit.getDefaultToolkit();
private JTextField txtEnterANumber;
private Dimension d = kit.getScreenSize();
private SelfDefinedStack stack = new SelfDefinedStack();
private JPanel panel;
private JLabel lblPleaseEnterThe, lblNewLabel ;
private JButton btnTop,btnPush,btnPop,btnNewButton;
private JTextArea txtrEmptyStack;
public void init() {
setSize(d.width/4,d.height/3);
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setLocation(d.width/2, d.height/2);
panel.setBackground(Color.YELLOW);
panel.setForeground(Color.WHITE);
getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
lblPleaseEnterThe = new JLabel("please enter the number you want to push");
lblPleaseEnterThe.setForeground(Color.BLUE);
panel.add(lblPleaseEnterThe);
txtEnterANumber = new JTextField();
panel.add(txtEnterANumber);
txtEnterANumber.setColumns(10);
btnTop = new JButton("top");
btnTop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TopButtonaction(e);
}
});
panel.add(btnTop, BorderLayout.WEST);
btnPush = new JButton("Push");
btnPush.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
PushButtonaction(e);
}
});
btnPop = new JButton("Pop");
btnPop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
PopButtonaction(e);
}
});
panel.add(btnPop);
panel.add(btnPush);
txtrEmptyStack = new JTextArea();
txtrEmptyStack.setText("Empty Stack");
txtrEmptyStack.setRows(10);
txtrEmptyStack.setLineWrap(true);
txtrEmptyStack.setFont(new Font("Lucida Grande", Font.BOLD, 13));
txtrEmptyStack.setEditable(false);
txtrEmptyStack.setColumns(20);
panel.add(txtrEmptyStack);
lblNewLabel = new JLabel("<html><font size = 4 color = Blue>Welcome!");
lblNewLabel.setForeground(Color.BLUE);
panel.add(lblNewLabel, BorderLayout.SOUTH);
btnNewButton = new JButton("Clear Stack");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ClearButtonaction(e);
}
});
panel.add(btnNewButton, BorderLayout.SOUTH); }
protected void ClearButtonaction(ActionEvent e) {
// TODO Auto-generated method stub
if(stack.isEmpty())
{
lblNewLabel.setText("<html><font size = 4 color = Red>Stack is already cleared");
}
else
{
stack.clear();
lblNewLabel.setText("<html><font size = 4 color =Blue>StackCleared");
txtrEmptyStack.setText("Empty Stack");
}
}
protected void PopButtonaction(ActionEvent e) {
// TODO Auto-generated method stub
if(stack.isEmpty())
{
lblNewLabel.setText("<html><font size = 4 color = Red>Stack's Empty Can't Pop");
}
else
{
Object obj = stack.pop();
lblNewLabel.setText("<html><font size = 4 color = Blue>"+obj.toString()+"is poped");
newText();
}
}
protected void PushButtonaction(ActionEvent e) {
// TODO Auto-generated method stub
if(txtEnterANumber.getText().equals(""))
{
lblNewLabel.setText("<html><font size = 4 color = Red>Please input a number to push");
}
else
{
stack.push(txtEnterANumber.getText());
lblNewLabel.setText("<html> <font size = 4 color = Blue>"+txtEnterANumber.getText()+"is pushed");
newText();
}
txtEnterANumber.setText("");
}
protected void TopButtonaction(ActionEvent e) {
// TODO Auto-generated method stub
if(stack.isEmpty())
{
lblNewLabel.setText("<html><font size = 4 color = Red>Empty Stack Can't Top");
}
else
{
stack.top();
lblNewLabel.setText("<html><font size = 4 color = Blue>"+stack.top().toString()+"is topped");
newText();
}
}
protected void MouseClickedaction(MouseEvent e) {
// TODO Auto-generated method stub
if(txtEnterANumber.getText().equals(""))
{
txtEnterANumber.setText("Enter a number");
}
else
{
txtEnterANumber.setText("");
}
}
public void newText() {
if (!stack.isEmpty()) {
txtrEmptyStack.setText(stack.Link() + "\r\n" + "Size of Stack: " + stack.size() +
"\r\nTop of Stack: " + stack.top());
} else {
txtrEmptyStack.setText("Empty Stack");
}
}
}
import static org.junit.Assert.*;
import junit.framework.TestCase;
import org.junit.Test;
public class StackTest extends TestCase { private SelfDefinedStack stack_test;
public void Test()
{
stack_test = new SelfDefinedStack();
testsize();
testclear();
testpush();
testtop();
testpop();
}
/**
* Test of size() method of class SelfDefinedStack
* This method will push an element into the stack and verify that the stack size will
* increase by 1
*/
public void testsize()
{
int count = 0;
count = stack_test.size();
System.out.println("size of the stack is "+count);
stack_test.push("test_stack1");
int newcount = stack_test.size();
System.out.println("size of the stack is "+newcount);
if(newcount != count+1)
{
System.out.println("sizetest failed");
}
else
{
System.out.println("sizetest passed");
}
}
/**
* Test of push() method of class SelfDefinedStack
* This method will push an element into the stack and verify that the stack size will
* increase by 1
*/
public void testpush()
{
stack_test.clear();
if(stack_test.size() != 0)
{
System.out.println("testpush() failed on size");
}
else
{
stack_test.push("test_stack2");
if(stack_test.size() != 1)
{
System.out.println("testpush() failed");
}
else
{
System.out.println("testpush() passed");
}
}
}
/**
* Test of pop() method of class SelfDefinedStack
* This method will pop out the element on the top of the stack and verify the returned item
*/
public void testpop()
{
stack_test.clear();
if(stack_test.size() != 0)
{
System.out.println("testpop() failed on size");
}
else
{
stack_test.push("test_stack3");
if(stack_test.size() != 1)
{
System.out.println("testpush() failed");
}
String popElem = stack_test.pop().toString();
if(popElem == null)
{
System.out.println("testtop() failed: return element is null");
}
else if (popElem != "test_stack3")
{
System.out.println("testpop() failed wrong element returned ");
}
else if(stack_test.size() != 0)
{
System.out.println("testpop() failed: size is not 0");
}
System.out.println("testpop() passed");
}
}
/**
* Test of top() method of class SelfDefinedStack
* This method will verify that the element on the top of the stack will be retrieved and the
* stack won't change
*/
public void testtop()
{
stack_test.clear();
if(stack_test.size() != 0)
{
System.out.println("testtop() failed on size");
}
else
{
stack_test.push("test_stack4");
stack_test.push("test_stack5");
String topElem = stack_test.top().toString();
if(stack_test.size() != 2)
{
System.out.println("testtop() failed on size");
}
else if(topElem == null)
{
System.out.println("testtop() failed: Element topped from stack is null");
}
else if(!topElem.equals("test_stack5"))
{
System.out.println("testtop() failed: Element topped is not the first element of the stack");
}
else
System.out.println("testtop() passed");
}
}
/**
* Test of clear() method of class SelfDefinedStack
* This method will verify that all elements in the stack have been removed
*/
public void testclear()
{
stack_test.push("test_stack6");
if(stack_test.size() <= 0)
{
System.out.println("testclear() failed on push");
}
else
{
stack_test.clear();
if(stack_test.size() != 0)
{
System.out.println("testclear() failed");
}
else
System.out.println("testclear() passed");
}
}
}
以上是测试类
以下是实现的简单堆栈功能
import java.util.LinkedList;
/**
* This class
* @author shiyucai
*
*/
public class SelfDefinedStack implements Stack{ /**
*
*/
@Override
public void push(Object obj) {
assert obj!=null;
assert wellformed();
num++;
list.addFirst(obj);
}
/**
*
*/
@Override
public Object pop() {
// TODO Auto-generated method stub
assert wellformed();
return list.pollFirst();
}
/**
*
*/
@Override
public int size() {
// TODO Auto-generated method stub
assert wellformed();
return list.size();
}
/**
*
*/
@Override
public Object top() {
// TODO Auto-generated method stub
assert wellformed();
if(num!=0)
return list.getFirst();
else
return "empty stack";
}
public void clear() {
list = new LinkedList<Object>();
num = 0;
}
public boolean isEmpty() {return list.isEmpty();}
protected boolean wellformed(){ if (this.size() < 0 || this.size() > num) {
return false;
}
return true;
}
public String Link()
{
LinkedList<Object> lnk = new LinkedList<Object>();
if(num >= 1)
{
lnk = list;
}
else
{
return "Empty Stack";
}
return lnk.toString();
}
private LinkedList<Object> list = new LinkedList<Object>();
private int num = 0;
}
public interface Stack
{
public void push(Object obj);
public Object pop();
public int size();
public Object top();
}import javax.swing.JApplet;
public class StackJApplet extends JApplet implements ActionListener{
public StackJApplet() {
}
Toolkit kit = Toolkit.getDefaultToolkit();
private JTextField txtEnterANumber;
private Dimension d = kit.getScreenSize();
private SelfDefinedStack stack = new SelfDefinedStack();
private JPanel panel;
private JLabel lblPleaseEnterThe, lblNewLabel ;
private JButton btnTop,btnPush,btnPop,btnNewButton;
private JTextArea txtrEmptyStack;
public void init() {
setSize(d.width/4,d.height/3);
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setLocation(d.width/2, d.height/2);
panel.setBackground(Color.YELLOW);
panel.setForeground(Color.WHITE);
getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
lblPleaseEnterThe = new JLabel("please enter the number you want to push");
lblPleaseEnterThe.setForeground(Color.BLUE);
panel.add(lblPleaseEnterThe);
txtEnterANumber = new JTextField();
panel.add(txtEnterANumber);
txtEnterANumber.setColumns(10);
btnTop = new JButton("top");
btnTop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TopButtonaction(e);
}
});
panel.add(btnTop, BorderLayout.WEST);
btnPush = new JButton("Push");
btnPush.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
PushButtonaction(e);
}
});
btnPop = new JButton("Pop");
btnPop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
PopButtonaction(e);
}
});
panel.add(btnPop);
panel.add(btnPush);
txtrEmptyStack = new JTextArea();
txtrEmptyStack.setText("Empty Stack");
txtrEmptyStack.setRows(10);
txtrEmptyStack.setLineWrap(true);
txtrEmptyStack.setFont(new Font("Lucida Grande", Font.BOLD, 13));
txtrEmptyStack.setEditable(false);
txtrEmptyStack.setColumns(20);
panel.add(txtrEmptyStack);
lblNewLabel = new JLabel("<html><font size = 4 color = Blue>Welcome!");
lblNewLabel.setForeground(Color.BLUE);
panel.add(lblNewLabel, BorderLayout.SOUTH);
btnNewButton = new JButton("Clear Stack");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ClearButtonaction(e);
}
});
panel.add(btnNewButton, BorderLayout.SOUTH); }
protected void ClearButtonaction(ActionEvent e) {
// TODO Auto-generated method stub
if(stack.isEmpty())
{
lblNewLabel.setText("<html><font size = 4 color = Red>Stack is already cleared");
}
else
{
stack.clear();
lblNewLabel.setText("<html><font size = 4 color =Blue>StackCleared");
txtrEmptyStack.setText("Empty Stack");
}
}
protected void PopButtonaction(ActionEvent e) {
// TODO Auto-generated method stub
if(stack.isEmpty())
{
lblNewLabel.setText("<html><font size = 4 color = Red>Stack's Empty Can't Pop");
}
else
{
Object obj = stack.pop();
lblNewLabel.setText("<html><font size = 4 color = Blue>"+obj.toString()+"is poped");
newText();
}
}
protected void PushButtonaction(ActionEvent e) {
// TODO Auto-generated method stub
if(txtEnterANumber.getText().equals(""))
{
lblNewLabel.setText("<html><font size = 4 color = Red>Please input a number to push");
}
else
{
stack.push(txtEnterANumber.getText());
lblNewLabel.setText("<html> <font size = 4 color = Blue>"+txtEnterANumber.getText()+"is pushed");
newText();
}
txtEnterANumber.setText("");
}
protected void TopButtonaction(ActionEvent e) {
// TODO Auto-generated method stub
if(stack.isEmpty())
{
lblNewLabel.setText("<html><font size = 4 color = Red>Empty Stack Can't Top");
}
else
{
stack.top();
lblNewLabel.setText("<html><font size = 4 color = Blue>"+stack.top().toString()+"is topped");
newText();
}
}
protected void MouseClickedaction(MouseEvent e) {
// TODO Auto-generated method stub
if(txtEnterANumber.getText().equals(""))
{
txtEnterANumber.setText("Enter a number");
}
else
{
txtEnterANumber.setText("");
}
}
public void newText() {
if (!stack.isEmpty()) {
txtrEmptyStack.setText(stack.Link() + "\r\n" + "Size of Stack: " + stack.size() +
"\r\nTop of Stack: " + stack.top());
} else {
txtrEmptyStack.setText("Empty Stack");
}
}
}
解决方案 »
- 一行SQL更新语句,在SQL工具中能执行通过,但在Java中用JDBC中更新却失败,请问这是什么原因?
- 关于并行计算
- jayflee 和hongke1490进来 回答了补分(Vector() 删除元素碰到的问题)
- protected 权限问题
- 继承问题
- 做个C/S系统,客户端如何读写服务端的文件?
- java学习,郁闷!!
- 用jbuilder6 开发 database application时遇到点问题,请指教(在线等)
- 关于JPasswordField类的问题
- 内存泄漏是什么?怎么造成的?java中会不会产生内存泄漏?
- 求大神看看下列代码的this(红色的字体)是什么意思?还可以用什么方式代替this
- 新人求助
这个对象要么已经被释放了,要么就是没有被实例化
只会调用你写的test***的测试函数类。
所以,stack_test这个变量在JUnit Test 调用 test*** 函数时,会是被认为没有初始化。
所以会抛出NullPoint这个异常。解决方案: 定义时就初始化stack_test 这个变量。
private SelfDefinedStack stack_test;
修改为:
private SelfDefinedStack stack_test = new SelfDefinedStack();;
然后再运行,就没有任何问题了。
楼主的test***函数写的都没有问题,如果
楼主的unit test 自己写个main函数,调用Test()函数,并且最后Run as Java Application,而不是Run as JUnit Test,那么,也不会报NullPointer的异常,而且会正常打印出 test pass的日志。