Fjerne element fra intern datastruktur?
Jeg forsøger at lave en simpel efterligning af nogle af de grundlæggende egenskaber, Java's ArrayList og Vector har. Problemet med dem er i mit tilfælde, at man godt kan indsætte egne objekter i dem, men at man efter indsætning ikke har adgang til deres klassevariable og -metoder. Nedenstående kode virker, men jeg vil også gerne kunne fjerne et Postering-element, så man ikke behøver bekymre sig om eventuelle NullPointerExceptions - altså så man præcis får fjernet et element i det interne array i PostListe-klassen, der indeholder Postering-objekter.Min grundlæggende ide til funktionen er som følger (har bare ikke kunnet realisere det i kode, der rent faktisk virker...):
- Flyt alle objekter EFTER det udpegede objekt (f.eks. med index-færdi sendt som argument til metoden) en plads bagud
- Lav midlertidigt array med 1 plads mindre end det nuværende array (postliste.length - 1)
- Gennemløb det oprindelige array (postliste) indtil det midlertidige array's længde er nået, og indsæt pladser fra det oprindelige array i det midlertidige (temparray)
- Sæt det oprindelige array lig det midlertidige array
Problemer, jeg ikke har taget højde for her er, hvordan man bærer sig ad med at fjerne objektet på index 0 (da den så formentlig vil komme til at lede efter en negativ index-værdi -1 => ArrayIndexOutOfBoundsException) samt det sidste objekt i array'et (hvorved den vil komme til at gå out of bounds den anden vej, altså prøve at flytte objekter efter det sidste element, som ikke findes).
Her ses min kode til klasserne Postering og PostListe:
[Postering.java]
public class Postering
{
String navn, underpostAf;
double beloeb;
int maaned;
public Postering(String navn, double beloeb)
{
this.navn = navn;
this.beloeb = beloeb;
this.maaned = 0;
this.underpostAf = "";
}
public Postering(String navn, double beloeb, int maaned, String underpostAf)
{
this.navn = navn;
this.beloeb = beloeb;
this.maaned = maaned;
this.underpostAf = underpostAf;
}
public void setNavn(String nytnavn)
{
this.navn = nytnavn;
}
public void setBeloeb(double nytbeloeb)
{
this.beloeb = nytbeloeb;
}
public void setMaaned(int nymaaned)
{
this.maaned = nymaaned;
}
public void setUnderpostAf(String nyUnderpostAf)
{
this.underpostAf = nyUnderpostAf;
}
public String toString()
{
if(this.underpostAf == "")
return this.navn + " \t" + this.beloeb;
else
return this.navn + " " + "(" + this.underpostAf + ") \t" + this.beloeb;
}
}
[PostListe.java]
public class PostListe
{
public Postering[] postliste;
public int antal; // Antal posteringer lagret i denne liste
public PostListe()
{
postliste = new Postering[1];
antal = 0;
}
public void tilfoejPostering(Postering post)
{
if(antal == postliste.length)
udvid();
postliste[antal] = new Postering(post.navn, post.beloeb, post.maaned, post.underpostAf);
antal++;
}
private void udvid()
{
Postering[] temp = new Postering[postliste.length + 1];
for(int i = 0; i < postliste.length; i++)
temp[i] = postliste[i];
postliste = temp;
}
public Postering get(int index)
{
return postliste[index];
}
public String toString()
{
String str = new String();
for(int i = 0; i < antal; i++)
str += postliste[i].toString() + " på postliste[" + antal + "]" + "\n";
return str;
}
}