Kleines Problem mit Array

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi Leute,

Mein Prob.:

Es soll ein Array aufgenommen werden(unsortiert), in der Methode sortiert und dann
zurückgegeben werden.

Hab folgenden Ansatz:

Code:
public int[] arraySortieren2(int[] var)
	{
		
		int[] t = new int[var.length];
		Arrays.sort(var);
		for(int i = 0; i < var.length; i++)
		{
			t[i]= i;
		}
		
		return t;
	}

Ich bekomme als Rückgabewert nur die eine Adresse.

Ein Lösung ist nicht direkt nötig. Tipps würden schon reichen. Wollte nämlich gerne selber
das "Ziel" erreichen :###
 
Ok, also das ist ziemlich falsch...

Code:
      int[] t = new int[var.length]; //du erstellst ein neues Array mit gleicher Länge
      Arrays.sort(var); //du sortierst das eigentliche Array
      for(int i = 0; i < var.length; i++) 
      {
         t[i]= i; //das Resultat wird so aussehen: [0,1,2,3,4,5...]
      }
      
      return t;
Richtig wäre es so:
Code:
public void arraySortieren2(int[] var) 
{
    Arrays.sort(var); 
   //ein return brauchst du nicht, du änderst das Orginal Objekt bereits
}
Wie du siehst lohnt sich für diesen Einzeiler eine Methode nicht wirklich.
 
Mal davon abgesehen, dass mit
Code:
Arrays.sort(var);
das Array bereits sortiert und damit eine Methode drumrum wie die deinige unnötig ist (es sei denn, du willst eigens einen Sortieralgorithmus implementieren):

i wird meistens als Schleifenzähler verwendet.

(Sorry, aber ein viel besserer Hinweis viel mir wirklich nicht ein.)

Ark
 
dank an euch beide... 😳

war je echt blöd von mir... :shock: --> guckt dumm aus der Wäsche...

Hab wohl wie immer zu kompliziert gedacht.

Schönen Gruß
 
Falls es interessiert, ich habe es so gemacht:
Code:
public int[] arraySortieren2(int[] var)
	{		
		Arrays.sort(var);
		int[] i = Arrays.copyOf(var,var.length);
		return i;
	}

und im Aufrufer:
Code:
                  int[] p = s.arraySortieren2(u);
						for(int i = 0; i < p.length; i++)
						{
						System.out.println(p[i]);
						}

danke nochmal 😀
 
Hi Leroy42,

meinst Du, dass ich das Array, das an die Methode, die es sortieren soll übergeben habe nun
auch verändert habe (nicht mit der Referenz gearbeitet, sonder mit dem Original)??

danke
 
Stimmt, ich habe es ausprobiert. Ich habe mit dem Original gearbeitet Mist... :?

Aber ich habe es ein wenig verändert. Was haltet ihr jetzt davon. Ist das Ok?

Code:
public int[] arraySortieren2(int[] var)
	{		
		int[] copy = Arrays.copyOf(var, var.length);
		Arrays.sort(copy);
		int[] i = Arrays.copyOf(copy,copy.length);
		return i;
	}



Code:
       Sortieren s = new Sortieren();
		int[] r = s.arraySortieren2(w.a1);
		for(int i = 0; i < r.length; i++)
		{
			System.out.println("Array sortiert " + r[i]);
		}
		for(int i = 0; i < w.a1.length; i++)
		{
			System.out.println(" " + w.a1[i]);
		}
Jetzt erscheint zuerst das sortierte und dann das unsortierte Array. Somit wird das Original nicht verändert,

danke
 
Du machst Dir irgendwo zuviel Arbeit:
Code:
public int[] arraySortieren2(int[] var)
{
    int[] copy = Arrays.copyOf(var, var.length); // Kopie anfertigen
    Arrays.sort(copy); // Kopie sortieren
    int[] i = Arrays.copyOf(copy, copy.length); // sortierte Kopie nochmal kopieren
    return i; // Kopie der sortierten Kopie zurückgeben
}
Ich würde es so machen:
Code:
public int[] arraySortieren3(int[] var)
{
    int[] copy = var.clone();
    Arrays.sort(copy);
    return copy;
}
 
Hi,

stimmt, an "clone" hatte ich gar nicht gedacht 😳
Werde es gleich ausprobieren, danke!

Aber eine neue Frage hat sich gerade aufgetan:
deep-Copy
sondern nur eine shallow-Copy macht.

1. Was ist denn eine deep-Copy?

2. Was ist denn eine shallow-Copy?

danke 😀
 
😀
hast ja recht.

Der Mensch ist eben etwas faul :gaen:

Wozu hat man(n) denn das Internet??!!!!??

gruß und grins
 
[quote="SlaterB"habs eh nur wegen des Scherzes geschrieben[/quote]
:::und ich hoffe, dass es gewirkt hat...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben