我无法从Java中的数组列表中删除最后一个元素

时间:2012-05-22 09:47:22

标签: java arrays

我的程序包含3个类 学生,Aplt和Aplt3课程


import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Student {

    String name;
    int mark;

    Student(String name, int mark) {
        this.name = name;
        this.mark = mark;
    }
} 

带有构造函数的学生类

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.TextFiEld;
import java.awt.event.ActioNevent;
import java.awt.event.ActionListener;

public class Aplt extends Applet {

    TextField tf[] = new TextField[2];
    Student prs[] = new Student[0];
    ActionListener ins;

    public void init() {
        tf[0] = new TextField("name?", 10);
        tf[1] = new TextField("mark", 5);
        add(tf[0]);
        add(tf[1]);
        tf[1].addActionListener(ins = new Ins());
    }

    class Ins implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            String n = tf[0].getText();
            int nt = Integer.parseInt(tf[1].getText());
            Student help[] = new Student[prs.length + 1];
            System.arraycopy(prs, 0, help, 0, prs.length);
            help[help.length - 1] = new Student(n, nt);
            prs = help;
            tf[0].setText("next name");
            tf[1].setText("next mark");
            repaint();
        }
    }

    public void paint(Graphics g) {
        for (int i = 0; i < prs.length; i++) {
            g.drawString(prs.name, 10, 50 + 12 * i);
            g.drawString(prs.mark + "", 130, 50 + 12 * i);
        }
    }
}

这里是aplt类。 class列出了给定的名称和标记

import java.applet.Applet;
import java.awt.Button;
import java.awt.event.*;

public class Aplt3 extends Aplt {

    Button b1, b2;

    public void init() {
        super.init();
        b1 = new Button("remove");
        b1.addActionListener(new B1());
        add(b1);
    }

    class B1 implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            int i;
            for (i = 0; i < prs.length; i++) {
                Student help[] = new Student[prs.length - 1];
                System.arraycopy(help, 0, help, 0, help.length);
            }
            repaint();
        }
    }
}

aplt3类。这里我想删除按钮时删除数组的最后一个元素,但它不会发生。

2 个答案:

答案 0 :(得分:2)

这对我来说非常可疑:

for ( i=0 ; i<prs.length; i++) { 
Student help[] = new Student[prs.length-1]; 


System.arraycopy(help, 0, help, 0, help.length); 

} 

将数组帮助复制到自身并使用数组的完整大小。此外,你在一个看起来不太好的循环中执行此操作。我认为你所寻找的都是这样的:

Student help[] = new Student[prs.length-1]; 
System.arraycopy(prs, 0, help, 0, help.length); 

根本没有循环。确保prs不为空,否则会遇到问题。

顺便说一下,括号表示“数组”不是“ArrayList”。 ArrayList是Java Collection类。

答案 1 :(得分:1)

以下是您用来添加学生的代码:

Student help[] = new Student[prs.length+1]; 
System.arraycopy(prs, 0, help, 0, prs.length); 
help[help.length-1]= new Student (n,nt); 
prs=help; 

只需使用相同的想法删除一个:

Student help[] = new Student[prs.length-1]; 
System.arraycopy(prs, 0, help, 0, help.length); 
prs=help;