Java Array als Parameter

Vulpecula

Commander
Registriert
Nov. 2007
Beiträge
2.241
Hallo!

Ich hänge gerade auf einem Problem fest und könnte einen Tipp gebrauchen. Und zwar übergebe ich ein Array als Parameter, allerdings scheint es mir, als würde das Array in der aufgerufenen Methode das übergebene Array überschreiben.

Der Aufruf erfolgt ganz regulär. Das (statische) Array habe ich vorher schon initialisiert und mit Werten gefüllt:

Code:
meineMethode(inputArray);

Der Aufruf der Methode:
Code:
public static void meineMethode(int[] neuesArray)
{
  ...
}

Sollte so nicht ein neues Array angelegt werden, das via Call-By-Value eine Kopie des übergeben Arrays ist?

(Ja, die äußere Schleife von sort() ist Murks, aber das weiß ich. ;))

Code:
package main;

import java.util.Scanner;

public class Main
{
	public static int[] inputIntegerArray = new int[6];
	public static int[] outputIntegerArray = new int[6];

	public static void main(String[] args)
	{
		getUserInput();
		sort(inputIntegerArray);
		printResults();
	}

	public static void sort(int[] feld)
	{
		int tmp;
		do
		{
			tmp = feld[0];
			for (int j = 1; j < feld.length; j++)
			{
				if (feld[j] < feld[j-1])
				{
					tmp = feld[j-1];
					feld[j-1] = feld[j];
					feld[j] = tmp;
				}
			}
		}
		while (tmp != feld[0]);
		outputIntegerArray = feld;
	}

	public static void getUserInput()
	{
		Scanner input = new Scanner(System.in);
		for (int counter=0; counter<inputIntegerArray.length; counter++)
		{
			while (true)
			{
				System.out.print("Bitte die " + (counter+1) + ". ganze Zahl eingeben: ");
				String inputString = input.next();
				try
            	{
					inputIntegerArray[counter] = Integer.parseInt(inputString);
                	break;
            	}
            	catch (NumberFormatException ne)
            	{
                	System.out.println("Eingabe war keine ganze Zahl!");
            	}
			}
		}
		input.close();
	}

	private static void printResults()
	{
		System.out.print("Eingegebene Reihenfolge der ganzen Zahlen: ");
		for (int counter=0; counter<inputIntegerArray.length; counter++)
		{
			System.out.print(inputIntegerArray[counter] + " ");
		}
		
		System.out.println();
		
		System.out.print("Reihenfolge Zahlen nach der Sortierung: ");
		for (int counter=0; counter<outputIntegerArray.length; counter++)
		{
			System.out.print(outputIntegerArray[counter] + " ");
		}
	}
}
 
Nein, das Array wird nicht kopiert. Das Call-by-Value bezieht sich bei Arrays auf deren Referenz, genau so wie bei Objekten auch.
 
Ah, okay. D.h. ich werde ein weiteres Array zur Hilfe nehmen, bzw. mit nur einem Array arbeiten und eine Ausgabe jeweils davor und dahinter machen müssen. Oder gibt es eine "elegantere" Lösung?

Edit: Ich habe jetzt quick & dirty mit

Code:
int[] temporaryIntegerArray = Arrays.copyOf(inputIntegerArray, inputIntegerArray.length);

eine Kopie erzeugt. Ist nicht besonders schön, aber erfüllt seinen Zweck. Ich will ausgründen™ an der sort() Methode nichts ändern.
 
Zuletzt bearbeitet:
Was ist daran dirty? Genau dafür ist die Funktion gedacht. Wenn du das Original später noch brauchst musst es halt so machen.
Was aber definitiv dirty ist, sind die statischen Variablen. Verwende lieber die Rückgabewerte der Funktionen. Bei getUserInput() würde ich das erwarten.
 
Ich werde mich gleich dransetzten und das abändern. Vielen Dank für den Hinweis! :)
 
Zurück
Oben