user1384891
user1384891

Reputation: 3

I can't delete last element from array list in Java

My program contains 3 classes Student , Aplt and Aplt3 classes


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;
    }
} 

student class with constructor

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);
        }
    }
}

here is aplt class. class lists us given names and marks

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 class. Here I want to delete last element of array when I click to remove button, but it doesn't happen.

Upvotes: 0

Views: 2145

Answers (2)

pgras
pgras

Reputation: 12770

Here is the code you use to add a student:

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; 

Just use the same idea to remove one:

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

Upvotes: 1

Guillaume Polet
Guillaume Polet

Reputation: 47608

This looks very suspicious to me:

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


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

} 

You copy the array help to itself and with the complete size of the array. Moreover you do this in a loop which does not look good. I think that all your looking for is something like this:

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

and no loop at all. Make sure that prs is not empty, otherwise you will run into problems.

By the way, brackets indicate an "array" not an "ArrayList". An ArrayList is a Java Collection class.

Upvotes: 2

Related Questions