2016-08-30 6 views
-1

Ich versuche, einen C++ - Code in Java zu konvertieren. Das C++ Code-Snippet ist: findMedian(array+left+i*5, 5);.Java: Wie bekomme ich die Adresse des Arrays?

Der übergebene Parameter ist die Arrayadresse, die sich entsprechend dem Wert von i ändert. Wie kann ich diesen Code ändern, so dass es in Java Die Methode funktioniert, ist wie folgt:

public int findMedian(int arr[], int n) 
{ 
    Arrays.sort(arr); 
    return arr[n/2]; // Return middle element 
} 
+0

misread zu Beginn. Nein, Sie können keinen Verweis auf den Wert im Array übergeben. Ich würde eine Funktion empfehlen, die das Array und einen Offset verwendet und den Offset auf Zugriffe innerhalb der Funktion anwendet. – mascoj

+0

Können Sie zeigen, wie die Methode die Adresse verwendet und wie sie weitergegeben wird? –

+0

Ich habe die Funktion findMedian hinzugefügt. @mascoj: Offset wie im Index? – Pepper

Antwort

5

Sie die andere Überlastung von Arrays.sort verwenden können, um Art nur ein Teil des Arrays:

public static int findMedian(int arr[], int from, int n) { 
    Arrays.sort(arr, from, from + n); 
    return arr[from + (n/2)]; // Return middle element 
} 

Dann rufen wie:

findMedian(array, left + i * 5, 5); 
2

in Java nicht möglich ist, direkt Speicherplatz zu adressieren.

In C Speicher wird mit einem Zeiger adressiert.

In Java wird Speicher mit einer Referenz adressiert.

Für einen Vergleich zwischen Java und C siehe link from Princeton University.

+0

Wenn ich nur einen Teil des Arrays ändern möchte, was soll ich dann verwenden? Wenn ich es nicht in ein anderes Array kopieren möchte? – Pepper

+0

Wenn Sie ein einzelnes Element des Arrays ändern möchten, verwenden Sie den Befehl array [4] = newValue; –

+0

Die Methode versucht, nur einen Teil des Arrays und nicht das gesamte Array zu ändern. – Pepper

4

Wie andere schon gesagt haben, lässt Java Sie keine Berechnungen mit Zeigern durchführen oder betrachten Sie sie überhaupt. Im Allgemeinen sind Zeiger und Speicher in Java das Problem des Compilers, nicht Ihres.

Davon abgesehen, sollten Sie immer noch in der Lage sein, über die Werte in einem Array zu schauen; Übergeben Sie ihm einfach einen Verweis auf das Array selbst und machen Sie dann die notwendigen Berechnungen für die Indizes. Schwieriger, spezifischer zu werden, ohne genau zu wissen, was diese Methode tut.

+0

Die Methode versucht, nur einen Teil des Arrays und nicht das gesamte Array zu ändern. – Pepper

+1

@Tehreem Okay, das ist kein Problem. Sie übergeben die Methode das Array und die Information darüber, welchen Teil Sie ändern. (Auf diese Weise müssen Sie den Methodenkopf ändern. Wenn das überhaupt keine Option ist, können Sie etwas Hässliches tun, wenn Sie neue Arrays erstellen, die aus den Teilen bestehen, die geändert werden sollen, und die Teile gleich bleiben Teile, die geändert werden sollen, und schließe sie dann wieder an. Ich empfehle das nicht.) –

1

Ist das machbar?

findMedian(array, left+i*5, 5); 

Signatur:

public int findMedian(int[] array, int offset, int value1) { 
    //... 
} 
Verwandte Themen