26. februar 2004 - 19:49Der er
14 kommentarer og 1 løsning
Resize et array
Hej,
Lad os sige jeg har en klasse der ser således ud:
public class Test {
private int N = 8; private int[] A = new int[N];
public static void resizeArray() { int[] prevArray = A; N = N*2;
// Slet indholdet af det gamle array
// Læg indholdet af prevArray ind i A (dog på nogle andre pladser) } }
Funktionen resizeArray har til formål at fordoble længden af arrayet A, men man kan tydeligvis ikke gøre det som vist herover, hvilket egentligt også er logisk nok, men hvad gør man så? Jeg kunne jo godt have lavet det som en vektor i stedet, men kan man ikke gøre det med et array på en eller anden smart måde?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Nej, et array har en fast længde. Hvis du skal bruge mere plads, bliver du nødt til at oprette et nyt array og kopiere indholdet af det gamle over i det nye.
public static int[] resizeArray() { int[] tempArray = new int[A.length()*2]; // Læg indholdet af A ind i tempArray(dog på nogle andre pladser) retyrn tempArray; }
og den bruger du så på denne måde: A = resizeArray(); // dobler længden af dit array
PS: du skal måske lave en check så du er sikker på ikke at doble så mange gange at du bruger din memory op :)
1) jo se på ArrayList-klassen. Den er implementeret som du prøver på ;-) 2) det kan godt lade sig gøre, men du er nødt til at oprette et nyt arrat med dobbelt størrelse og så kopiere det gamle array til det nye.
Og en anden ting. enten skal både metode og array være statiske, eller også skal ingen af dem være statiske. du kan ikke adressere en instance variabel fra en statisk metode. så fjern 'static' i metoden: public int[] resizeArray() {
Hvis man vil forstå hvordan tingene fungerer, er det bedste vel at prøve at genskabe det selv. Og hans problemstilling er jo netop sådan det foregår i en Vector.
Men ellers har du ret. Det meste er jo lavet for en...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.