好吧我现在遇到的问题是我在公共类中遇到错误杂志查看扩展Applet {'我明白了“空白字段Jlist可能尚未初始化”
这是我的GUI小程序
public class MagazineView extends Applet {
Button button, button2;
final MagazineList Jlist;
public void init() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//NORTH PANEL
JPanel northPanel = new JPanel(new BorderLayout());
JPanel topPanel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Add Magazine: ");
final JTextField text1 = new JTextField();
JButton button = new JButton("List Magazines");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final String name=text1.getText();
Magazine mag = new Magazine(name);
Jlist.insert(mag);
}
});
topPanel.add(label, BorderLayout.LINE_START);
topPanel.add(text1, BorderLayout.CENTER);
topPanel.add(button, BorderLayout.LINE_END);
//CENTER PANEL
JPanel centerPanel = new JPanel(new BorderLayout());
JTextArea atext = new JTextArea();
centerPanel.add(atext, BorderLayout.CENTER);
//BOTTOM PANEL
JPanel bottomPanel = new JPanel(new BorderLayout());
JLabel label2 = new JLabel("Delete All: ");
JTextField text2 = new JTextField();
JButton button2 = new JButton("Delete Magazine");
bottomPanel.add(label2, BorderLayout.LINE_START);
bottomPanel.add(text2, BorderLayout.CENTER);
bottomPanel.add(button2, BorderLayout.LINE_END);
northPanel.add(topPanel, BorderLayout.NORTH);
northPanel.add(centerPanel, BorderLayout.CENTER);
northPanel.add(bottomPanel, BorderLayout.SOUTH);
//Frame
frame.add(northPanel);
frame.setSize(600, 400);
frame.setVisible(true);
}
}
这是我的方法
public class MagazineList {
private MagazineNode list;
public MagazineList(){
list=null;
}
public void insert (Magazine mag){
MagazineNode node = new MagazineNode(mag);
node.next = list;
list = node;
}
public void add (Magazine mag){
MagazineNode node = new MagazineNode (mag);
MagazineNode current;
if(list==null)
list = node;
else
{
current = list;
while(current.next !=null)
current = current.next;
current.next = node;
}
}
public void DeleteNode(Magazine mag)
{
if(list == null) throw new RuntimeException("Cannot delete, Empty List");
if( list.magazine.equals(mag) )
{
list = list.next;
return;
}
MagazineNode cur = list;
MagazineNode prev = null;
while(cur != null && !cur.magazine.equals(mag) )
{
prev = cur;
cur = cur.next;
}
if(cur == null) throw new RuntimeException("Cannot delete, not in list");
//delete cur node
prev.next = cur.next;
}
public String toString(){
String result ="";
MagazineNode current = list;
while (current !=null){
result += current.magazine + "\n";
current = current.next;
}
return result;
}
private class MagazineNode {
public Magazine magazine;
public MagazineNode next;
public MagazineNode(Magazine mag){
magazine = mag;
next = null;
}
}
}
答案 0 :(得分:0)
如果要在头部插入节点,则无需遍历列表。您的list
变量是链接列表的头部,因此让您的新节点指向它并使其成为头部。
/**
* Add a new node containing the input Magazine to the front of the linked list.
*
* @param mag A magazine to put at the head of the list.
*/
public void add (Magazine mag){
MagazineNode node = new MagazineNode(mag);
node.next = list;
list = node;
}
您可能希望将名称list
更改为head
。请注意,这不需要任何if
语句。顺便说一句,您不必显示GUI代码。