Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Array reverse Problem, da Referenz nicht auf tmpArray zeigt
Hallo Community!
Dies ist mein erster Beitrag und ich lerne grade Java mittels der Lektüre "Java ist auch eine Insel". Derzeit versuch ich folgende Aufgabe des Buches zu lösen, nur hab ich das Problem, dass das folgende Programm zweimal das gleiche Array ausgibt. Ich denke das hängt vielleicht mit dem Gültigkeitsbereich der Arrays zusammen, bin mir aber nicht sicher. Das Problem könnte man auch lösen, wenn man die for-Schleife in der reverse Funktion nochmal anders herum ablaufen lassen würde, denke ich, aber das wäre mir zu unelegant. Außerdem: Mir ist bewusst, dass ich auch das Array selber zurückgeben könnte wenn ich statt void Object[] zurückgeben würde, aber wegen Trainingszwecken ist das hier gewollt.
Deswegen wäre ich froh, wenn mir jemand meinen Denkfehler aufzeigen könnte. Ich hoffe auf schnelle Hilfe !
Code:
import java.util.Arrays;
/**
* Schreibe eine Funktion reverse(), die ein gegebenes Feld umdreht, d. h.,
* dass das erste Element nach der Operation hinten steht und das letzte Element steht vorne.
*
* @author Josef Ippisch
*
*/
public class Reverse
{
public static void reverse( Object[] array )
{
if ( array == null )
return;
// a temporarily created array which will be the reversed array
Object[] tmpArray = new Object[array.length];
// implementing the tmpArray with the reversed values of the given array
for( int i = 0, d = array.length - 1;
d >= 0;
i++, d-- )
tmpArray[i] = array[d];
// referencing the old array with the new one
array = tmpArray;
}
public static void main(String[] args)
{
Double[] testArr = new Double[] {0.0,1.0,2.0,3.0};
System.out.println( Arrays.toString(testArr) ); // This display is the same...
// after reverse
reverse(testArr);
System.out.println( Arrays.toString(testArr) ); // as this one here.
}
}
In Java sind alle Parameterübergaben by Value (es werden zwar meistens Referenzen übergeben, aber die eben by value!).
D.h. das hier
// referencing the old array with the new one
array = tmpArray;
wird außerhalb der Methode nichts bringen.
Wenn der übergebene Array umgedreht werden soll, kannst du z.B. immer elemente des übergebenen Arrays vertauschen: Das nullte mit dem letzten, das erste mit dem vorletzten, das zweite mit dem vor-vorletzten usw...
Was ist jetzt daran so schlimm? ???:L Natürlich könntest du nach wie vor einen neuen Array anlegen, das ganze dann so lösen wie bisher, und am Ende die Daten mit System.arraycopy wieder in den übergebene Array kopieren, aber das wäre... murksig