[Java] Problem beim Sortieren eines Arrays

MaverickM

20k Fleet Admiral Pro
🎅Rätsel-Elite ’24
Registriert
Juni 2001
Beiträge
29.095
Also die Aufgabe ist folgende:
Ich erstelle eine Methode, die ein Array bekommt, mit Koordinaten (sieht dann so aus: X1, Y1, X2, Y2...). Dann hab ich eine Methode die die Distanz zu einer gegeben Position berechnet und sie in einer ArrayList speichert.
Nun soll die Arraylist sortiert werden nach der geringsten Distanz zuerst, und die zugehörigen Koordinaten zu der Distanz in ein drittes Array abgespeichert werden. (Damit es also wieder so aussieht wie das Eingangsarray, nur diesmal nach Entfernung sortiert).

Soweit so gut.
Hab das mal implementiert, aber wenn ich nun bspw. ein Array der Länge 8 übergebe (also 4 Positionen) dann schreibt er bspw. die ersten beiden korrekt ins Array (auch richtig sortiert), und dann schreibt er den letzten EIntrag wieder und wieder in das Array bis es voll ist (Also so: 1,2,3,4,3,4,3,4....).

Ich steh da irgendwie auf dem Schlauch und krieg nich raus wo der Fehler is. Ich hoff einer kann mir helfen ;)

Code:
int[] search(int[] a, int x, int y)
	{
		flagsInOrder = new int [a.length];
				
		int nearestDist = 1000000000;
		int b = a.length;
		
		ArrayList<Integer> distancesAscending = new ArrayList<Integer>();
		
		for(int coords = 0 ; coords < b; coords = coords+2)
		{
			nearestDist = getDistance( x, y, a[coords], a[coords+1] );
			distancesAscending.add(nearestDist);
		}
		
		int tmp = 0;
		for(int s = 0; s < b; s = s+2)
		{
			int tmpNearest = 1000000000;
			
			for(int i = 0 ; i < distancesAscending.size(); i++ )
			{
				
				int c = distancesAscending.get(i);
				if(c < tmpNearest )
				{
					tmpNearest = c;
					tmp = i;	
				}		
			}
			distancesAscending.remove(tmp);
			flagsInOrder[s] = a[tmp +tmp];
			flagsInOrder[s+1] = a[tmp+tmp+1];
		}
		return flagsInOrder;
	}

PS.: Ja, ich weiß, die Variablen sind etwas krude bezeichnet, soll aber hier nicht der Punkt sein ;)
 
AW: [Java] Problem beim Sortieren eines Arrays... Dringend!

Musst du unbedingt Felder nehmen, oder tun es da auch die weitaus mächtigeren SortedSet, ArrayList usw.?
Dann könntest du dir die manuelle Sortiererei sparen.
 
AW: [Java] Problem beim Sortieren eines Arrays... Dringend!

Felder? Du meinst die int Arrays?
Ja, die sind fest vorgegeben :(
 
AW: [Java] Problem beim Sortieren eines Arrays... Dringend!

Ich hab heute mal die ArrayList durch eine HashMap ersetzt. Idee: Als Key wird die Flaggennummer verwendet, der Wert ist die Distanz.
Findet er nun die geringste Distanz schreibt er bei dem entsprechenden Key als Distanz -1. Beim nächsten Aufruf wird er dann ignoriert (weil Distanz -1).

Gesagt, Getan: Gleiches Problem wie bei der Variante mit ArrayList!

Ich verzweifel langsam...

Code:
int[] search(int[] a, int x, int y)
	{
		flagsInOrder = new int [a.length];
		
		int b = a.length;
		
		HashMap<Integer, Integer> distancesMap = new HashMap<Integer, Integer>(); 
		Integer flagKeys = 0;
		
		for(int coords = 0 ; coords < b; coords = coords+2)
		{
			Integer distance = getDistance( x, y, a[coords], a[coords+1] );
			distancesMap.put(flagKeys, distance);
			flagKeys++;
		}
		
		int tmp = 0;
		
		for(int s = 0; s < b; s = s+2)
		{
			int tmpNearest = 10000000;
			Integer flag = 0;
			
			for(int i = 0 ; i < b/2; i++ )
			{				
				int f = distancesMap.get(flag);
					
				if(f != -1 && f < tmpNearest)
				{
					//System.out.println("Neuer Kleinster gefunden. Flagge: " +flag);
					tmpNearest = distancesMap.get(flag);
					tmp = flag*2;
					distancesMap.put(flag, -1);
				}
			}
			//System.out.println("tmp Variable: " + tmp);
			flagsInOrder[s] = a[tmp];
			flagsInOrder[s+1] = a[tmp+1];
		}
		return flagsInOrder;
	}
 
AW: [Java] Problem beim Sortieren eines Arrays... Dringend!

Du hast einen Denkfehler bei der Schleife mit "for (int s...)".
Du ziehst aus der Liste mit den Distanzen die Geringste raus, und fügst der Rückgabeliste die Position dieser und der nächsten hinzu, beim nächsten Durchlauf könnte die Position wieder dieselbe sein. Deshalb bekommst du die gleichen Nummern.
 
AW: [Java] Problem beim Sortieren eines Arrays... Dringend!

Schreib dir eine Klasse, in deren Objekte du die Koordinaten und die Entfernung speichern kannst. In dieser Klasse implementierst du dann das Interface Comparable so, daß du anhand der Entfernung vergleichen kannst. die Objekte packst du dann in eine ArrayList. Diese kannst du dann mit
Code:
Collections.sort()
aufsteigend sortieren. Anschließend holst du der Reihe nach alle Koordinaten wieder raus und speicherst sie im Rückgabe-Array.
 
AW: [Java] Problem beim Sortieren eines Arrays... Dringend!

@Cobinja: Das hört sich ziemlich kompliziert an. Muss ich da nicht eigene Datentypen definieren? Sowas hab ich noch nie gemacht.

Gibts da nicht einen einfacheren Weg?
 
AW: [Java] Problem beim Sortieren eines Arrays... Dringend!

Du musst etwas sortieren, was aus zwei unterschiedlichen Sachen besteht. Im ersten Moment würde sich daher die HashMap anbieten. Diese ist aber keine Liste, du müsstest dir also eine eigene Sortierroutine schreiben.

Einfacher ist es, auf Java-Bordmittel zurückzugreifen. Und so eine Klasse, wie von mir oben vorgeschlagen, braucht nur ein paar Datenfelder mit Getter- und setter-Methoden und halt die Methode compareTo() aus dem Interface Comparable. Mehr braucht es nicht.

Guck dir mal das JavaDoc von dem Interface an und probier es. Wenn dann Fragen auftauchen: Ich hab Zeit.
 

Ähnliche Themen

Zurück
Oben