Paar kleine Grundsatzfragen zu Java

babuschka

Top Contributor
Hallo,

bin recht neu in Java und steh vor ein paar Problemen.

1. Array "durchmischen":

Ich habe hier ein Array mit verschiedenen Objekten drin. Die sind jetzt erstmal so beispielsweise sortiert:

1
2
3
4
5...

Aber gibts ne Möglichkeit diese per Zufall durchmischen zu lassen, sodass beispielsweise sowas bei rauskommt?

3
4
1
5
2
...

2. Array nach Variable des Objekts sortieren?

Dann habe ich hier beispielsweise ein Array bestehend aus 4 Objekten:

array[0] = Objekt1 (Variable "punkte" = 10)
array[1] = Objekt1 (Variable "punkte" = 4)
array[2] = Objekt1 (Variable "punkte" = 6)
array[3] = Objekt1 (Variable "punkte" = 8)

Gibts jetzt irgendwie ne Möglichkeit dieses Array nach den Objekte-Variablen neu zu sortieren? Also am Ende soll sowas bei rauskommen:

array[0] = Objekt1 (Variable "punkte" = 10)
array[1] = Objekt1 (Variable "punkte" = 8)
array[2] = Objekt1 (Variable "punkte" = 6)
array[3] = Objekt1 (Variable "punkte" = 4)


Hoffe Ihr könnt mir da eventuell bisschen helfen, wie bei sowas die Grundideen sind. 🙁

Dankeschön
 
1.)Arrays von Haus aus können das nicht nein..du kannst dir aber ja leicht ein eigenes Zufallsmischen schreiben 😀 (aber dann nicht so: Microsofts Browserwahl ist nicht zufällig genug - Golem.de *g* )
Oder du wandelst es mit Arrays.asList zu einer Liste und benutzt dann Collections.shuffle!

2.) Ja, entweder müssen deine Objekte Comparable implementieren, oder du schreibst einen Comparator, dann kannst du mit Arrays.sort sortieren!
 
Man kann (bei einem Array der Größe n) n mal zwei Objekte an zufällig gewählten Arraypositionen vertauschen.

Achso ja klar....ich lass das einfach 100mal durchlaufen und tausche 100 Werte aus. Schon ist es gemischt...danke

2.) Ja, entweder müssen deine Objekte Comparable implementieren, oder du schreibst einen Comparator, dann kannst du mit Arrays.sort sortieren!

Kannst du da vielleicht noch bisschen mehr zu sagen, bzw. wo kann ich dazu noch was rausfinden? Geht jetzt hier genauer drum, dass ich in einer Gruppe zum Beispiel 4 Mannschaften habe. Jede Mannschaft hat eine bestimmte Anzahl von Punkten, dann von Toren....

Und jetzt möchte ich eben das Array der 4 Mannschaften erst nach den Punkten, dann nach den Toren...etc sortieren. Die Punkte und Tore, etc. sind bisher alles Variablen der Mannschaften.
 
Jepp, neue Klasse erstellen, das Interface Comparator implementieren..genaue Infos und Beispiele findest du unteranderem hier:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 12.4 Vergleichen von Objekten

Java:
class Team {
	// vereinfacht public
	public int punkte;
	public int tore;

	public Team(int p, int t) {
		this.punkte = p;
		this.tore = t;
	}

	public String toString() {
		return "Punkte: " + this.punkte + " Tore: " + this.tore;
	}

	public static void main(String[] args) {
		Team[] teams = new Team[4];
		teams[0] = new Team(10, 20);
		teams[1] = new Team(4, 8);
		teams[2] = new Team(4, 12);
		teams[3] = new Team(18, 10);
		Arrays.sort(teams, new TeamComparator());
		for (Team team : teams) {
			System.out.println(team);
		}
	}
}

class TeamComparator implements Comparator<Team> {
	public int compare(Team o1, Team o2) {
		// hier also beide teams vergleichen
		// zuerst punkte...wenn diese gleich sind, tore vergleichen
		int p = o2.punkte - o1.punkte;
		if (p != 0) {
			// punkte nicht gleich --> also tore nicht pruefen
			return p;
		} else {
			return o2.tore - o1.tore;
		}
	}
}
 
Zuletzt bearbeitet:
Schönen Guten Abend,

ich habe gestern ein Arrays bestehend aus Objekten gemischt.
Ich geb Dir einfach den Code. Vielleicht hilfts ja.
Da das Array ja eigentlich nur die Referenzen auf die tatsächlichen reell im speicher existerenden
Objekte verwaltet reicht es ja völlig aus die Referenzen zu tauschen.

Java:
private void mische_Karten(){

		for(int i =0; i < karte.length; ++i){

			Karte temp;
			int n = new Random().nextInt(karte.length);

			// tausche

			temp = karte[i];

			karte[i] = karte[n];
			karte[n] = temp;
		}
	}

Damit Random() funktioniert musst du noch java.util.Random einbinden.

Java:
import java.util.Random;

Fröhliches Mischen!

Gruß,
myjday
 

Neue Themen


Zurück
Oben