2014-03-07 28 views
5

Ich muss ein Array implementieren, das seine Elemente aus einem Zufallsgenerator übernimmt. Immer wenn das Array das letzte Element erreicht, wird eine Methode resize() aufgerufen, um die Größe des Arrays zu erhöhen. In meinem Code wird alles bis zum Aufruf der resize() -Methode aktiviert, es wirkt sich nicht auf die Größe des Arrays aus. Es sollte die Größe des Arrays erhöhen, damit mehr Elemente eingegeben werden können.Wie man die Größe eines Arrays verdoppelt

for (int j=0; j<arr.length-1; j++) { 
     random= generator.nextInt(arr.length*4) ; 
     arr[j]=random; 

     } 

    if(arr_size==arr.length){ 
     resize(arr); 
     for (int h=0; h<(arr.length-1)*2; h++) { 
      random= generator.nextInt(arr.length*4) ; 
      arr[h]=random;} 
    } 

Hier ist die Größe():

 private static void resize(int[] arr) { 

    int[] tmp = new int[2*arr.length]; 
    System.arraycopy(arr,0,tmp,0,arr.length); 
    arr = tmp; 
} 

Antwort

2

Entweder gesetzt und geben die Variable tmp, wie durch Kon beschrieben, oder Sie passieren in arr durch Bezugnahme Änderungen vorzunehmen, um es außerhalb der Resize-Funktion bestehen:

private static void resize(ref int[] arr) { .... } 

und es wie

resize(ref arr); 
+0

'ref' ist nicht gültig Java. Vielleicht hast du an C# gedacht? – MarredCheese

6

arr = tmp Einstellung nicht tut, was Sie denken, es tut. Sie zeigen einfach die lokale Variable arr in der resize()-Methode auf die lokale Variable tmp. Sie möchten tmp zurückgeben und außerhalb der Methode arr zuweisen.

if(arr_size==arr.length){ 
    arr = resize(arr); 

und ändern Sie die resize() Methode Signatur

private static int[] resize(int[] arr) { 
    //Resize 
    return tmp; 
} 

Das Wichtigste zum Mitnehmen ist, dass: Wenn ein Objekt Verweis auf eine Methode in Java vorbei, sind Sie eine Kopie dieses Objekts vorbei Referenz, die als eine Kopie des Speicherorts dieses Objekts angesehen werden kann. Alle diese Manipulationen an dieser REFERENCE in der aufgerufenen Methode werden außerhalb der Methode nicht wirksam. Sie können jedoch das eigentliche Objekt selbst manipulieren, weil, wie gesagt, die Referenz auf den gleichen Ort im Speicher mit dem exakt gleichen Objekt zeigt.

Aber eine Kopie einer Stelle im Speicher zu Punkt an eine neue Stelle im Speicher die Referenz ursprüngliche Berufung Objekt derselben Stelle

+1

vielen Dank :) – Jason

0

hinweist, nicht dazu führt, ändert Wenn Sie New int sagen, Referenz geändert werden . Java verwendet Copy by Reference nicht genau Pass by reference, wenn Sie den Verweis durch new ändern, haben die Eigenschaften der aufrufenden Methode keine Änderung, in Ihrem Fall haben Sie einen Rückgabetyp und weisen ihn wieder arr zu.

+0

rufen das ist, was er tut .. . – Kon

+0

@Kon, sah nur, dass und aktualisiert mit meiner Antwort – Kumar

1

versuchen Sie dies:

private static int[] resize(int[] arr) { 

     int[] tmp = new int[2*arr.length]; 
     System.arraycopy(tmp,0,arr,0,arr.length); 
     System.out.println(tmp.length); 
     arr = tmp; 
     return arr; 
    } 
Verwandte Themen