Array nach eigenem Muster sortieren

Tinipieps

Mitglied
Hallo.

Mit dem Befehl
Code:
Array.sort(eigenesArray);
erhält man eine Ausgabe in folgender Form:
0, 1, 11, 13, 2, 21, 3, 31

Wie bekomme ich es hin, dass wie folgt sortiert wird:
0, 1, 2, 3, 11, 13, 21, 31

Ich bin noch sehr neu in der Welt von Java.
Ich glaube man kann das doch irgendwie mit einem Comparator lösen, oder?

Vielleicht könnte mir jemand genau erklären, wie das funktioniert (wenn möglich bitte mit Quellcode-Beispiel)!?

Danke
 
Moin,

aus welchen Paket kommt denn Dein Array (sprich: welches Paket hast Du hierfür importiert) ?

Gruß
Klaus
 
Hallo,

Beispielcode habe ich gerade keinen zur Hand, könnte ich dir eventuell später posten.

Es lässt sich mit einem Comparator lösen, den übergibst du mit bei der sort-Methode.
Kann es sein, dass du Strings vergleichst?


Ein Comparator ist leicht zu implementieren. Du schreibst eine Klasse, die das Interface Comparator implementiert. Deshalb musst du dann die Methode compare ausprogrammieren. In dieser Methode vergleichst du dann deine Objecte so wie du es möchtest.
Ist dein das erste Object kleiner gibst du -1, wenn es gleich groß ist gibst du 0 und wenn es größer ist 1 zurück.

Wenn du Strings vergleichst und nur Zahlen drin stehen, könntest du einfach die String mit Integer.toString() in eine Zahl verwandeln, so kannst du diese leichter vergleichen.

Gruß

Sascha
 
Das, was dir rauskommt, kommt raus, wenn deine Elemente als Strings im Array stehen. Dabei wird alphabetisch sortiert. Willst du "deine" Ausgabe haben, dann könntest du das in dem Fall mit einem int-Array erreichen. Dabei wird nach größe sortiert.

Java:
package tests.array.sort;

import java.util.Arrays;

public class ArraySortTest {
	public static void main(String[] args) {
		int[] iArr = new int[]{1, 5, 123, 11, 2};
		String[] strArr = new String[]{"1", "5", "123", "11", "2"};
		Arrays.sort(iArr);
		Arrays.sort(strArr);

		for(int i : iArr) {
			System.out.print(i + " ");
		}
		System.out.println();
		for(String str : strArr) {
			System.out.print(str + " ");
		}
	}
}
Ausgabe:
Code:
1 2 5 11 123
1 11 123 2 5
 
Sollten es bei dir Strings sein kansst du sie mit
Java:
String s = "31";
int i = Integer.parseInt(s);
in int umwandeln.

die Ausgabe von z ergibt dann wieder 31.
 
Zuletzt bearbeitet von einem Moderator:
Sollte dir bei der Umwandlung der Strings in int mal ein String unterkommen,
der nicht in int geparsed werden kann, kannst du die Anweisung noch mit try/catch
umgeben. parsInt schmeisst nämlich eine exeption wenn der String nicht geparsed
werden kann. Etws so:

Java:
String i = "31a";
		
		try{
			int z = Integer.parseInt(i);
		}catch (NumberFormatException e) {
			System.out.println("geht nicht :)");
		}
ausgabe wäre hier : geht nicht :)
 
Zuletzt bearbeitet:
... und ich habe noch einen alten comparator gefunden

Java:
public class ObjectComarator implements Comparator<Object> {

	@Override
	public int compare(Object o1, Object o2) {
		if (o1 == o2 ) {
			return 0;
		} else if (o1 < 02) {
			return -1;
		} else if (o1 > o2) {
			return 1;
		}
	}

}

Musste den Code ändern und hab ihn nicht getestet. Das Prinzip sollte klar werden.
 
Zuletzt bearbeitet:
Also, wenn ich das richtig verstehe, kann man nur ein intArray richtig sortieren (wenn man die Zahlen betrachtet). Bei einem StringArray würde es immer zu der von mir bemängelten Sortierung kommen!?

Nun ist es so, dass ich jeder Zahl immer ein Wort vorangestellt habe...also ein String nach dem Prinzip eines intArray sortieren will.

Geht das mit der von FrankBooth vorgeschlagenen Methode (parsen)?

Ich versuch einfach mal ein bißchen, würde mich aber auch noch über Hinweise freuen!
 
Zuletzt bearbeitet:
Also,

wenn du an den Strings nichts machst wird er auch immer nach dem String sortieren.

Du musst die String so verändern oder deinen Comparator so schreiben, dass er das liefert, was du willst.

Mal ein paar gedankliche Spiel:

Beispiel 1:

immer das gleiche Wort vor der Zahl.
String : Name1
String: Name2
Dem Coparator beide Strings übergeben,
im comparator "Name" aus dem String entfernen,
Reststring zu int parsen und die Zahlen vergleichen.
Rückgabe ist immer -1, 0, 1.

Beispiel 2:

String: Name_1
String: Wohnung_2
Dem Coparator beide Strings übergeben,
im comparator alle inkl dem "_" wegschneiden,
Reststring zu int parsen und die Zahlen vergleichen.
Rückgabe ist immer -1, 0, 1.
 
Ach ja, hier vielleicht mal mein Code, mit dem ich arbeite.
Code:
protected void fillRadioBox(String text) {
		final String release = text;
		
		AuswahlController ac = new AuswahlControllerImpl(text);
		String[]keys=ac.getServerKeys();
		Arrays.sort(keys);
		
		for (String i:keys ) {
			final JRadioButton button = new JRadioButton (i, true);
			
				button.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {
							try{								
									ServerAuswahlMenue.namingAendern
										(button.getText(), release);
							} catch (Exception ex) {
								ex.printStackTrace();
							}
						}
				});
			serverAuswahl.add(button);
			panelServerGroup.add(button);
		}		
	}

Ich erstelle quasi Button in der Form "XXXserver1" und möchte, dass diese abhängig von der Zahl und nicht vom String sortiert werden.
 
Zurück