Array in funktion einlesen und ausgeben

Status
Nicht offen für weitere Antworten.

eva_m

Mitglied
Bei meinem Programm wird im main-teil ein array mit n zahlen eingelesen. In der funktion reverse sollen die bereits eingelesenen Werte vertauscht werden (letzte an erste Stelle, vorletzte an zweite etc.) und anschließend soll der Array (nun eben in umgekehrter Reihenfolge) wieder zurückgegeben werden.


int n; //Mächtigkeit der eingegebenen Zahlen
int[] zahlen; //Array wurde schon richtig berechnet

Nun hab ich im main-teil folgendes stehen:

zahlen=reverse(zahlen, n);

Und die funktion:
Code:
	static int reverse (int[] z, int n) {
	
		int hilf; //zum Austauschen der Zahlen
		int index; //zu erhöhender Index
		
		for (index=0; index<=(n/2); index++) {
			n=n-1;
			hilf=z[index];
			z[index]=z[n];
			z[n]=hilf;
		}
		
		return z;
				
	}

Auf jeden Fall kommt im main-teil als auch beim return immer die Fehlermeldung "incompatible types found: int, required: int[]. Ich hoffe ihr könnt mir weiterhelfen und sagen, was ich da bei den Parametern falsch gemacht hab!
DANKE!
 
Deine Funktion liefert 'int' zurück und du versuchst es wahrscheinlich
einem Array zuzuweisen.
Code:
public class Reverse
{
  public static void reverse(int[]a, int n)
  {
    for(int l=0, h=n-1; h>l; h--, l++)
    {
      int tmp = a[l];
      a[l] = a[h];
      a[h] = tmp;
    }
  }
  
  public static void main(String argv[])
  {
    int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    reverse(a, 5); // Nur die Reihenfolge der ersten 5 Einträge ändern

    // Ergebnis ist { 5, 4, 3, 2, 1, 6, 7, 8, 9, 10}
  }
}
 
Aber ich versteh nicht, warum die funktion int zurückliefert! ich hab z bei den funktionsparametern ja als array definiert und es soll auch ein array wieder zurückgegeben werden (damit ich den im main-teil dann auch ausgeben kann). Muss ich vielleicht bei "return z;" irgendwas anders schreiben, eckige klammern oder so?
 
Statt
Code:
static int reverse (int[] z, int n)
Code:
static int[] reverse (int[] z, int n)
(Achte auf die Klammern des Rückgabetypen)

Da aber ein solches Array per Referenz übergeben wird (z in Deinem Code),
ist es nicht notwendig diesen zurück zu geben. Es ist das gleiche, wie in der
aufrufenden Methode. Klartext: Keine Kopie.
Wenn Du Änderungen an dem Array vornimmst, dann ist es auch beim 'Aufrufer'
verändert.
z.B. (etwas unsinnig aber zeigt die Auswirkung)
Code:
public static void setValue(int []array, int index, int value)
{
  array[index] = value;
}

...

int[] a = new int[1]; // Array der Größe 1 erstellen
setValue(a, 0, 6); // 6 an der 0ten Position setzen
System.out.println(a[0]); // Ausgabe ist 6
 
DANKE für deine hilfe!
ich hab einfach bei "static int reverse (...) {" nach dem int die zwei eckigen Klammern hingeschrieben (wie dus mir gesagt hast) und jetzt funktioniert alles prima! is zwar nur ne kleinigkeit, aber selbst wär ich nie drauf gekommen!
aber das return hab ich gelassen, ohne funkts nicht...

jedenfalls danke nochmal!!! lg
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben