/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Resize et array?
Fra : Jacob Nielsen


Dato : 26-02-04 19:48

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?

Mvh. Jacob



 
 
René Iversen (26-02-2004)
Kommentar
Fra : René Iversen


Dato : 26-02-04 20:05


"Jacob Nielsen" <jacob.nielsenREMOVE@REMOVEget2net.dk> skrev i en meddelelse
news:403e3f81@news.wineasy.se...
> 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)
> }
> }
>

public static void resizeArray()
{
int[] prevArray = A;

A = new int[N*2];

for( int i = 0; i < prevArray.length; i++ )
A[i] = prevArray[i]; // ret selv det med pladserne som du vil have det
}



Lasse Reichstein Nie~ (26-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 26-02-04 20:50

"René Iversen" <riversen@SLETDETTEriversen.dk> writes:

> public static void resizeArray()
> {
> int[] prevArray = A;
>
> A = new int[N*2];

Her glemmer du at gemme N*2 :).

> for( int i = 0; i < prevArray.length; i++ )
> A[i] = prevArray[i]; // ret selv det med pladserne som du vil have det
> }

Alternativ (hvis elementerne skal blive ved med at ligge ved siden
af hinanden):
---
public static void resizeArray() {
int n = A.length;
int[] tmp = new int[n*2];
java.lang.System.arraycopy(A,0,tmp,0,n);
// ^ ændres hvis de skal ligge andre steder
A = tmp;
}
---

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Jacob Nielsen (26-02-2004)
Kommentar
Fra : Jacob Nielsen


Dato : 26-02-04 23:05

"Lasse Reichstein Nielsen" <lrn@hotpop.com> wrote in message
news:ad35r56j.fsf@hotpop.com...
> "René Iversen" <riversen@SLETDETTEriversen.dk> writes:
>
> > public static void resizeArray()
> > {
> > int[] prevArray = A;
> >
> > A = new int[N*2];
>
> Her glemmer du at gemme N*2 :).
>
> > for( int i = 0; i < prevArray.length; i++ )
> > A[i] = prevArray[i]; // ret selv det med pladserne som du vil have
det
> > }
>
> Alternativ (hvis elementerne skal blive ved med at ligge ved siden
> af hinanden):
> ---
> public static void resizeArray() {
> int n = A.length;
> int[] tmp = new int[n*2];
> java.lang.System.arraycopy(A,0,tmp,0,n);
> // ^ ændres hvis de skal ligge andre
steder
> A = tmp;
> }

Tak for svarene, jeg fandt ud af det..

Mvh. Jacob



Henning Petersen Wan~ (02-03-2004)
Kommentar
Fra : Henning Petersen Wan~


Dato : 02-03-04 12:30

Lasse Reichstein Nielsen <lrn@hotpop.com> wrote:

> "René Iversen" <riversen@SLETDETTEriversen.dk> writes:
>
> > public static void resizeArray()
> > {
> > int[] prevArray = A;
> >
> > A = new int[N*2];
>
> Her glemmer du at gemme N*2 :).

Er de regentligt nogen grund til at gemme N frem for blot at spørge på
størelsen af arrayet?

Selvfølgelig vil der være en performance-forskel hvis array-størrelsen
skal bruges meget tit, men til normalt brug hvor arrayet blot tilgås
uden at bekymre om størelsen ser jeg kun en potentiel fejlmulighed pga
redundant data.


--
Venlig hilsen / Best regards
   Henning

_H_P_C_o_n_s_u_l_t_ http://www.hpc.dk
Skoletoften 9, Blans http://www.turnsys.dk
DK - 6400 Soenderborg

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408183
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste