Array - Elemente umordnen ?

C

Christian11

Gast
Hi.
Ich habe ein Array mit einigen Elementen nach folgendem Schema:

Hersteller, Modell, Farbe, Austattung

=>
Java:
    static Autohaus[] autos= {
        new Autohaus("BMW", "320", "Schwarz", "Leder"),
        new Autohaus("Mercedes", "E", "Silber", "Leder"),
        new Autohaus("Nissan", "Primera", "Silber", "Automatik"),
        new Autohaus("Toyota", "350Z", "Schwarz", "Leder"),
        new Autohaus("Ford", "CMax", "Schwarz", "Automatik", "")
};

Jetzt möchte ich die Daten in dem Array allerdings so anordnen, dass die Farbe an erster Stelle steht.
Wie kann ich das realisieren ?

Danke euch.
LG
Christian11
 

Schandro

Top Contributor
?
du hast ein eindimensionales Array mit Instanzen der Klasse "Autohaus".
Willst du die Autohäuser nach der Farbe nach dem Alphabet sortieren? Dann schreib dir en Comparator und benutz Arrays.sort

oder was zum teufel meisnt du mit "das die Farbe an erster Stelle steht" ??? Meinst du das der Kosntruktor die Parameter in einer anderen Reihenfolge erwarten soll? Dann schreib den Konstruktor um.
 
C

Christian11

Gast
Daher schreibe ich euch ja :).
Ich kenne mich eher wenig aus und bin gerade dabei Java zu erlernen.

Kann mir jmd. den entsprechenden Code geben ?
 

Java.getSkill()

Aktives Mitglied
Du wirst sehen, dass die Reihenfolge der übergebenen Parameter wichtig ist. ich hab mal farbe und name vertauscht.


Java:
package konstruktorbsp;

public class Auto {
	
	private String name;
	private String farbe;
	private int kosten;
	
	public Auto(String str1, String str2, int kosten){
		this.farbe=str1;
		this.name=str2;
		this.kosten=kosten;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getFarbe() {
		return farbe;
	}

	public void setFarbe(String farbe) {
		this.farbe = farbe;
	}

	public int getKosten() {
		return kosten;
	}

	public void setKosten(int kosten) {
		this.kosten = kosten;
	}

}


Java:
package konstruktorbsp;

public class Start {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	
		Auto farbeNameKosten = new Auto("rot","bmw",30000);
		
		Auto nameFarbeKosten =new Auto("bmw","rot",3000);
		
		System.out.println("jetzt kommt FarbeNameKosten");
		
		System.out.println(farbeNameKosten.getFarbe());
		System.out.println(farbeNameKosten.getName());
		System.out.println(farbeNameKosten.getKosten());
		
		
		System.out.println("jetzt kommt NameFarbeKosten");
		
		System.out.println(nameFarbeKosten.getFarbe());
		System.out.println(nameFarbeKosten.getName());
		System.out.println(nameFarbeKosten.getKosten());
		
		System.out.println("Die Reihenfolge wie du die parameter an den Konstruktor übergibst" +
				"ist entscheidend!");
	}

}
 
C

Christian11

Gast
Leider stosse ich nun auf ein Problem, welches Eclipse als Typabweichung bezeichnet.
Da ich in dem Autohaus Array bereits bestehende Werte habe, möchte ich diese einfach nur Aufnehmen und umsortieren.

Dazu habe ich folgenden Code geschrieben:
Java:
    	Autohaus[] neueautos = new Autohaus [alteautos.length]; //Erzeuge neues Objekt mit Länge von Quellarray
    	
    	for (int i=0; i < z.length; i++){
    		neueautos [i] = alteautos[i].getFarbe() + "\t" + alteautos[i].getModell() + "\t" + alteautos[i].getHersteller();
    		System.out.println(z[i]);
    	}

Die Methoden getFarbe(), getModell(), getHersteller() geben mir den Wert aus dem alten Array, so das ich dann neu anordnen kann.

Java:
    public String getFarbe() {
    	return farbe;
    }
    
    public String getModell() {
        return modell;
    }
    
    public String getHersteller() {
        return hersteller;
    }

Im ersten Code bekomme ich jedoch einen Fehler in der 4. Zeile: Typabweichung, Kovertierung von String auf Autohaus nicht möglich.

Wie kann ich dieses Problem beheben ?
 

CHE123

Mitglied
hi,

in zeile 4 schreibst du in etwa

Java:
   Autohaus a = "roter 320er BMW";

vorne also Klasse Autohaus hinten Klasse String, das nimmt dir Java klarerweise übel.
sollte es nicht sowieso

Java:
Auto[] neueautos = new Auto[alteautos.length]; //Erzeuge neues Objekt mit Länge von Quellarray
heissen? Autohaus ist ja nur ein Container für einen Haufen Autos, oda?
Worum geht es dir beim Umsortieren? gehts nur um die Ausgabe - habs noch net ganz gecheckt...

g,
Christian
 
C

Christian11

Gast
Danke für Deine Antwort, es entspricht leider nicht dem was ich machen möchte.
Ich habe eine Reihung mit Elementen:

Java:
static Autohaus[] autos= {
        new Autohaus("BMW", "320", "Schwarz", "Leder"),
        new Autohaus("Mercedes", "E", "Silber", "Leder"),
        new Autohaus("Nissan", "Primera", "Silber", "Automatik"),
        new Autohaus("Toyota", "350Z", "Schwarz", "Leder"),
        new Autohaus("Ford", "CMax", "Schwarz", "Automatik", "")
};

Nun möchte ich allerdings ein neues Array erstellen, in dem bspw. die Farbe der oben eingetragenen Fahrzeuge am Anfang steht.
Also habe ich einige Methoden geschrieben:

Java:
    public String getFarbe() {
        return farbe;
    }
    
    public String getModell() {
        return modell;
    }

...

Diese sollen mir in einer Schleife in welcher ich einem neuen Array Elemente zuweise nun die vorhanden Werte übergeben:

Java:
        Autohaus[] NEUE_LISTE= new Autohaus [ALTE_LISTE.length]; //Erzeuge neues Objekt mit Länge von Quellarray
        
        for (int i=0; i < z.length; i++){
            NEUE_LISTE[i] = ALTE_LISTE[i].getFarbe() + "\t" + ALTE_LISTE[i].getModell() + "\t" + ALTE_LISTE[i].getHersteller();
        }

Leider kann ich das jedoch nicht so ohne weiteres, da ich die Fehlermeldung einer Typabweichung erhalte.
Meine Frage ist nun, was muss ich einbauen bzw. ändern, damit ich das wie oben gezeigt (in der Schleife) durchführen kann?

LG
Christian11
 

Final_Striker

Top Contributor
Also, wenn du willst das dir geholfen wird, dann ließ was die anderen dir antworten und MACHE das auch.

Da steht es:
Meinst du das der Kosntruktor die Parameter in einer anderen Reihenfolge erwarten soll? Dann schreib den Konstruktor um.


Aber das wird nichts an dem Objekt ändern, da das Objekt intern keine Reihenfolge von Attributen hat. D.h. egal an welcher Stelle die Farbe im Konstruktor steht, das Objekt wird IMMER identisch sein. Was du da machst ist deshalb völliger Unsinn.
 

Illuvatar

Top Contributor
Du hast da ein ganz grundlegendes Verständnisproblem. Was wir dir hier versuchen zu sagen, ist dass deine Frage ganz einfach keinen Sinn macht ;)
Die Sache ist die: Ein Autohaus* ist nur eine Ansammlung von Attributen. Diese haben keine Reihenfolge.
Du verwechselst dieses abstrakte Autohaus-Objekt mit seiner Repräsentation als Zeichenkette. Das sind aber zwei grundverschiedene Dinge. Und es gibt Wege, um das eine in das andere umzuwandeln:
  • Wenn du [c]new Autohaus("BMW", "320", "Schwarz", "Leder")[/c] schreibst, dann nimmst du die einzelnen Attribute und setzt sie zu einem Autohaus-Objekt zusammen. Dass hier der hersteller an erster Stelle steht, liegt ausschließlich an der Definition dieses Konstruktors, der vermutlich so ähnlich wie das hier aussieht:
    Java:
    public Autohaus(String hersteller, String modell, String farbe, String ausstattung)
    {
      this.hersteller = hersteller;
      this.modell = modell;
      this.farbe = farbe;
      this.ausstattung = ausstattung;
    }
    Du könntest den Konstruktor aber auch so schreiben:
    Java:
    public Autohaus(String modell, String hersteller, String farbe, String ausstattung)
    {
      this.modell = modell;
      this.hersteller = hersteller;
      this.farbe = farbe;
      this.ausstattung = ausstattung;
    }
    Dann würdest du ihn aufrufen mit [c]new Autohaus("320", "BMW", "Schwarz", "Leder")[/c]. Das Ergebnis wäre exakt das gleiche Autohaus. Dass beim Erstellen die Reihenfolge anders war, könnte man dann nicht mehr feststellen.
  • Um aus dem Autohaus eine Zeichenkette zu machen, gibt es in der Klasse eine toString-Methode, die vermutlich so in der Art aussieht:
    Java:
    public String toString()
    {
      return hersteller + "\t" + modell + "\t" + farbe + "\t" + ausstattung;
    }
    Wenn du [c]System.out.println(autohaus);[/c] machst, wird das intern in [c]System.out.println(autohaus.toString());[/c] umgewandelt. Was ausgegeben wird, ist also die Repräsentation als Zeichenkette. Du kannst aber einer Autohaus-Variable nicht einfach eine Zeichenkette zuweisen, sondern musst den Weg über den Konstruktor nehmen.

Und jetzt überleg nochmal, was es eigentlich ist was du machen willst. Willst du nur die Ausgabe in einer anderen Reihenfolge? Dann ändere die toString-Methode.


* Wäre es nicht sinnvoller, die Klasse einfach nur Auto zu nennen?
 
C

Christian11

Gast
Klasse. Danke Dir :)
Mein Verständnis wächst zunehmend..

Wie kann ich nun die bereits vorhandene Liste umstrukturieren, so das die Farbe immer am Anfang steht ? Die Liste ist nämlich deutlich länger als das Snipped das ich eingefügt habe und das per Hand zu tun wäre ein haufen Arbeit.. .
 
C

Christian11

Gast
Ach ja, ich möchte nicht nur die Ausgabe in einer anderen Reihenfolge, sonder auch das Array in einer anderen Reihenfolge speichern.
 
C

Christian11

Gast
Hab die Lösung gefunden. Danach suchte ich so lang, was dafür sorgt das nicht die Fehlermeldung der Typabweichung kommt:

Java:
neueautos[i] = new Autohaus(alteautos[i].getFarbe(),alteautos[i].getModell(),alteautos[i].getHersteller());

Das wars schon :D. Klar weiß ich was das heißt, vllt. habe ich mich einfach nur falsch ausgedrückt. Ist für einen Laien nicht immer einfach..

Danke Dir und euch allen für die Hilfe!
 
G

Gast2

Gast
Ja natürlich.
Im Kontruktor übergibst du als Hersteller die Farbe des Autos. Dein Programm kann ja nicht wissen, ob in dem String den du übergibst ein Autohersteller oder eine Farbe steht ;)

Wozu wollst du überhaupt die Reihenfolge ändern? Mit .getHersteller() kommst du doch immer an den Hersteller, ganz egal ob du den als erstes oder als letztes übergibst im Kontruktor?!
 
C

Christian11

Gast
Ich möchte die Attribute der einzelnen Elemente in einem Array neu anordnen, rein interesse halber um die Funktionen besser zu verstehen.

Mein Konstruktor sieht wie folgt aus:
Java:
class Autohaus{
    String farbe;
    String modell;
    String hersteller;
   
    Autohaus(String farbe, String modell, String hersteller) {
        this.farbe = farbe;
        this.modell = modell;
        this.hersteller = hersteller;
    }
   
    public String toString() {
        return hersteller + "," + modell + "," + farbe;
   }
}

Nun führe ich in einer Schleife bis 0 < a.length folgenden Code aus:

Java:
neueautos[i] = new Autohaus(alteautos[i].getFarbe(),alteautos[i].getModell(),alteautos[i].getHersteller());
[code=Java]

Folglich sollte mein Array nun so aussehen:

[code=Java]
static Autohaus[] autos= {
        new Autohaus("Schwarz", "320", "BMW"),
        new Autohaus("Silber", "E", "Mercedes"),
        new Autohaus("Silber", "Primera", "Nissan"),
        new Autohaus("Schwarz", "350Z", "Toyota"),
        new Autohaus("Schwarz", "CMax", "Ford")
};

Ist dies nicht korrekt ?
 
G

Gastredner

Gast
Der Inhalt eines Arrays wird nicht irgendwie auf magische Weise nach dem ersten Attribut der übergebenen Objekte sortiert - das ist zumindest das, was du dir vorstellst, wenn ich dich richtig verstehe.
Java:
static Autohaus[] autos= {
        new Autohaus("Schwarz", "320", "BMW"),
        new Autohaus("Silber", "E", "Mercedes"),
        new Autohaus("Silber", "Primera", "Nissan"),
        new Autohaus("Schwarz", "350Z", "Toyota"),
        new Autohaus("Schwarz", "CMax", "Ford")
};
Wenn du deinen Code genau so anordnest, dann werden die Autohaus-Objekte tatsächlich auch in dieser Reihenfolge im Array stehen. Automatisch sortiert werden sie allerdings nicht - wie auch, woher soll das Arrays bzw. Java wissen, wonach du dein Array sortieren willst?
Willst du dein Array sortieren, so musst du dies selbst erledigen - und dabei ist die Reihenfolge der Konstruktorparameter vollkommen irrelevant.
Ich verweise auf den Tipp von Schandro: Benutze einen Comparator und Arrays.sort():
Java:
import java.util.Comparator;

public class FarbComparator implements Comparator<Autohaus> {

	@Override
	public int compare(Autohaus a1, Autohaus a2) {
		return a1.getFarbe().compareTo(a2.getFarbe());
	}

	@Override
	public boolean equals(Object o) {
		if (o != null && (o instanceof FarbComparator || o == this) {
			return true;
		}
		return false;
	}
}
Diese Klasse kannst du nutzen, um mit ihrer Hilfe Autohäuser nach ihrer Farbe zu sortieren:
Java:
// Irgendwo im Quellcode...
Autohaus[] sortiert = Arrays.sort<Autohaus>(alteListe, new FarbComparator());
Die Methode sort() aus der Klasse Arrays benutzt dabei den übergebenen Comparator um festzustellen, wie sich zwei unterschiedliche Autohäuser zueinander vorhalten bzw. welches "größer" und welches "kleiner" ist. Im Beispiel werden die Farben dabei lexikographisch bzw. alphabetisch sortiert.

Den Code habe ich schnell hingewuselt - sollte so korrekt sein, ich habe es aber nicht überprüft.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Elemente in einem Array Java Basics - Anfänger-Themen 5
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
H Array Elemente Java Basics - Anfänger-Themen 17
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
V Array aus Klasse um vererbte Elemente erweitern Java Basics - Anfänger-Themen 3
A Array Elemente extrahieren ! Java Basics - Anfänger-Themen 4
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
arjoopy Kapselung Elemente aus Objekt-Array ausgeben Java Basics - Anfänger-Themen 8
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
C Array Elemente Paarweise vertauschen Java Basics - Anfänger-Themen 2
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
A Eindeutige Elemente aus Array extrahieren Java Basics - Anfänger-Themen 9
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
L Rückwärtsausgabe der Array-Elemente Java Basics - Anfänger-Themen 5
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
T Elemente im Array umdrehen Java Basics - Anfänger-Themen 9
L Elemente zufällig in ein Array verteilen Java Basics - Anfänger-Themen 12
T Wieviel Array-Elemente Java Basics - Anfänger-Themen 19
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
A Elemente in array umkehren Java Basics - Anfänger-Themen 32
H Alle Array-Elemente auf einmal überprüfen? Java Basics - Anfänger-Themen 10
R return Anweisungen und Array Elemente löschen Java Basics - Anfänger-Themen 6
B Ausgeben einzelner String Array Elemente funktioniert nicht Java Basics - Anfänger-Themen 4
K Elemente eines Array verschieben Java Basics - Anfänger-Themen 18
B zwei zufällige elemente aus array lesen und überprüfen Java Basics - Anfänger-Themen 8
T Elemente aus zweidimensionalen Array löschen Java Basics - Anfänger-Themen 6
D Array Elemente auslesen Java Basics - Anfänger-Themen 14
D Elemente im Array verschieben Java Basics - Anfänger-Themen 15
M XML-Elemente in Array speichern Java Basics - Anfänger-Themen 26
T Überprüfen, ob Array Elemente hat Java Basics - Anfänger-Themen 22
G Rekursiv Array Elemente quadrieren Java Basics - Anfänger-Themen 2
D String array im konstruktor --> wie gibt man elemente an? Java Basics - Anfänger-Themen 2
0 Element aus Array löschen andere Elemente verschieben? Java Basics - Anfänger-Themen 7
V Elemente an Array anhängen Java Basics - Anfänger-Themen 5
S Elemente aus Array entfernen Java Basics - Anfänger-Themen 8
M Array Elemente löschen Java Basics - Anfänger-Themen 6
G Elemente in einem String-Array in einen String umwandeln Java Basics - Anfänger-Themen 2
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben