Avatar billede tchami Nybegynder
26. februar 2004 - 19:49 Der 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?

På forhånd tak for hjælpen.
Avatar billede rasmusbg Nybegynder
26. februar 2004 - 19:52 #1
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.
Avatar billede jakoba Nybegynder
26. februar 2004 - 19:55 #2
Du er tæt på :-))

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 :)

mvh JakobA
Avatar billede repsak Nybegynder
26. februar 2004 - 19:55 #3
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.
Avatar billede jakoba Nybegynder
26. februar 2004 - 19:56 #4
ps: men hvorfor egentlig 'på nogle andre pladser' ?
Avatar billede jakoba Nybegynder
26. februar 2004 - 19:59 #5
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() {
Avatar billede tchami Nybegynder
26. februar 2004 - 20:06 #6
jakoba > "ps: men hvorfor egentlig 'på nogle andre pladser' ?" : Fordi det skal rehashes ;)

Jeg kigger lige svarene igennem senere, men mange tak for de hurtige svar.
Avatar billede mikkelbm Nybegynder
26. februar 2004 - 22:17 #7
Prøv at ta' et kig på arraycopy:

private int N = 8;
private int[] A = new int[N];

int[] A = new int[N);

int[] newArray = new int[A.length * 2];
System.arraycopy(A, 0, newArray, 0, A.length);
A = newArray;

Det skulle være en temmelig hurtig metode. Og det vil jo betyde noget, når der efterhånden bliver fyldt mange værdier i dit array.

Jeg er ikke sikker, men jeg mener faktisk at Vector bruger arraycopy til at fordoble længden af dets array, efterhånden som der fyldes objekter i...
Avatar billede mikkelbm Nybegynder
26. februar 2004 - 22:18 #8
følgende linje skal bare slettes:

int[] A = new int[N);
Avatar billede jakoba Nybegynder
26. februar 2004 - 22:20 #9
>> tchami
    Du skal gøre dig umage for at opfinde et behov som Java ikke allerede har en klasse til at løse. Har du kikket på java.util.hashTable ?

mvh JakobA
Avatar billede mikkelbm Nybegynder
26. februar 2004 - 22:27 #10
>> jakoba

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...
Avatar billede tchami Nybegynder
26. februar 2004 - 22:55 #11
>> jakoba : Læg et svar og pointene er dine..

Jeg ved godt at meget, for ikke at sige alt, allerede eksisterer i Java, men jeg ville bare prøve at lave det selv, og det har jeg fået gjort nu :)
Avatar billede jakoba Nybegynder
26. februar 2004 - 23:15 #12
takker.
Og Ja, jeg er helt enig med den indstilling ant kan også skal kunne lave det selv.

mvh JakobA
Avatar billede tchami Nybegynder
26. februar 2004 - 23:22 #13
Et svar? ;)
Avatar billede jakoba Nybegynder
26. februar 2004 - 23:25 #14
dooh :(  sorry.
Avatar billede tchami Nybegynder
26. februar 2004 - 23:31 #15
np :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester