Object Inhalt vergleichen?

Status
Nicht offen für weitere Antworten.

mobile

Bekanntes Mitglied
Hi, muss noch mal kurz nerven.

Erstelle irgendwo in meinem Programm Objecte vom Typ Track, diese Objecte enthalten Strings. Heißt, wenn ich nichts eingebe ist ein Object mit leeren Inhalt erzeugt.

Nun möchte ich wo anders in meinem Programm testen ob ein Object in meiner Liste leer ist. Mache das grade so, aber das geht irgendwie nicht.

Code:
 //Neues leeres Object von Disc wird angelegt
			Track emptyTrack = new Track((byte)1, "", "", "");
			
			for(int i = 0; i < list.size(); ++i) {
				System.out.println(list.get(i).equals(emptyTrack));
				if(emptyTrack.equals(list.get(i))) {
					
				}
				else {
					System.out.print((i+1)+ " ");
					System.out.println(list.get(i));
				}
			    System.out.println();
		    }

MIt list.get(i) hole ich mir die Objecte aus meiner Liste. die eigentlich leer sind. Aber der vergleich ergibt immer false. Wie geht das vielelicht?

Danke für eure Hilfe!
 

Wildcard

Top Contributor
Du musst equals so überschreiben das es true liefert wenn du 2 Objekte als Inhaltsgleich betrachtest.
Aber Vorsicht:
Wer A sagt muss auch B sagen, sprich, wenn du equals überschreibst musst du auch hashCode überschreiben.
 
G

gast

Gast
heißt das, dass ich mir eine eigene Methode equals schreiben muss? Wenn ja wie könnte die dann aussehen? Wie sieht das dann mit hash aus?
 

Wildcard

Top Contributor
Was soll ich da sagen?
Ich weiß ja nicht was du als Gleichheit von 2 Tracks bezeichnest.
Du musst sie eben so schreiben das bei 2 Tracks die du als gleich ansiehst true rauskommt.
Für hashCode gilt folgender Kontrakt:
wenn o1.equals(o2) true liefert muss o1.hashCode()= o2.hashCode() sein.
Daher musst du wann immer du equals überschreibst auch hashCode überschreiben.
 
G

Guest

Gast
Warum muss ich denn equals eigentlich überschreiben. Denke, das vergleicht schon Objecte. Will 2 Objecte vergelichen, sind beide Leer gibt es true, mehr will ich doch gar nich!
 

Wildcard

Top Contributor
equals ist eine Methode von Object. Jede Klasse kann diese Methode üerschreiben um Gleichheit so zu definieren wie sie im gegebenen Kontext passt.
Ein Object ist inhaltslos, daher überprüft ein nicht überschriebenes equals lediglich ob es sich bei 2 Objekten um ein und das selbe Object handelt (o1 == o2)
 

Jango

Gesperrter Benutzer
Wildcard hat gesagt.:
Ein Object ist inhaltslos, daher überprüft ein nicht überschriebenes equals lediglich ob es sich bei 2 Objekten um ein und das selbe Object handelt (o1 == o2)

...was bedeutet: Es wird geprüft, ob zwei Objekte auf den selben Speicherbereich zeigen. :wink:
 

JPKI

Top Contributor
Bau die equals-Methode mal folgendermaßen in deine Klasse "Track" ein:
Code:
public boolean equals(Object o) {
  Track newTrack = (Track)o;
  boolean boo = (getString1().equals(newTrack.getString1())) &&
  (getString2().equals(newTrack.getString2()));
  return boo;
}
Wobei du dir mit den Get-Methoden natürlich diese drei Strings geben lassen solltest, die du im Konstruktor übergibst.
 

JPKI

Top Contributor
:roll: Du vergleichst damit, ob das Track-Objekt, das gerade durch die Schleife läuft, mit dem "leeren" übereinstimmt. Ist das denn so schwer :roll: ?
 
G

Guest

Gast
Ja irgendwie schon. Hier ist die Klasse Track

Code:
import java.io.Serializable;

/**
 * @athor Timo Konietzko
 * Stellt eine Disc mit zugehörigen Daten da
 * */
public class Track implements Serializable, Daten {
	private static final long serialVersionUID = 1L;
	
	/**Attribute der Klasse, speichert jeweils ein Track*/
	public String interpret = "";
	public String titel = "";
	public String dauer = "";
		
	/**
	 * @param, byte track enthält Track Nr.
	 * @param String i, enthält den Interpreten
	 * @param String t, enthält den Titel
	 * @param String d, enthält die Dauer des Titels
	 * */
	Track(byte track, String i, String t, String d) {
		if(track <= MAX_TRACK) {
			this.interpret = i;
			this.titel = t;
			this.dauer = d;				
		}
	}

        public String getInterpret() {
		return this.interpret;
	}
	
	public String getTitel() {
		return this.titel;
	}
	
	public boolean equals(Object o) {
		System.out.println("IN");
		Track newTrack = (Track)o;
		boolean boo = (this.interpret.equals(newTrack) && (this.titel.equals(newTrack)));
		System.out.println(boo);
		return true;
	}
	
	/**
	 * Gibt ein Track wieder aus
	 * */
	public String toString() {
		String tmp = " ";
		final int MAX = 35;
		final int IMAX = 24;
		
		String tmpI = this.interpret;
		String tmpT = this.titel;
		
		while(tmpI.length() < IMAX) {
			tmpI += tmp;
		}
	    	
	    while(tmpT.length() < MAX) {
	    	tmpT += tmp;
		}
	    
	    return tmpI + tmpT + "\t" + this.dauer;
	}
}

So und hier die Klasse Open wod er vergleich gemacht wird:

Code:
//...
//Neues Object von Disc wird angelegt
			Track emptyTrack = new Track((byte)1, "", "", "");
			
			for(int i = 0; i < list.size(); ++i) {				
				if(emptyTrack.equals(list.get(i))) {
					System.out.println("GUT");
				}
				else {
					System.out.print((i+1)+ " ");
					System.out.println(list.get(i));
				}
			    System.out.println();
		    }
//...

So und wie soll das jetzt laufe?
 

JPKI

Top Contributor
Anonymous hat gesagt.:
Code:
	public boolean equals(Object o) {
		System.out.println("IN");
		Track newTrack = (Track)o;
		boolean boo = (this.interpret.equals(newTrack) && (this.titel.equals(newTrack)));
		System.out.println(boo);
		return true;
	}
Wieso vergleichst du, wenn du sowieso true zurückgibst? :bae: :wink:
Deine Codetransfer-Fähigkeiten sind (mit Verlaub ;-) ) etwas beschränkt, kann das sein?
Zunächst einmal muss die equals-Methode so aussehen:
Code:
public boolean equals(Object o) {
      System.out.println("IN");
      Track newTrack = (Track)o;
      boolean boo = (this.interpret.equals(newTrack.interpret) && (this.titel.equals(newTrack.interpret)));
      System.out.println(boo);
      return boo;
   }
Die Schleife ist in Ordnung. So müsste das jetzt funktionieren!
 

mobile

Bekanntes Mitglied
ja ist etwas schwer, grad für mich! Jetzt bekomme ich bei

Code:
Track newTrack = (Track)o;

nen ClassCastException?? Hab das so übernommen wie beschrieben!
 

JPKI

Top Contributor
Die List, bei der das Track-Objekt in der Schleife übergeben wird, muss (sollte) als List<Track> deklariert werden! Und sie muss natürlich Track-Objekte enthalten...

Anders kann ich mir die ClassCastException nicht erklären... :oops:
 

mobile

Bekanntes Mitglied
Also wenn ich ein Object erstelle und gebe anstatt einem String (zB Michael) nichts ein sondern drücke nur Enter, was wird denn dann in dem String gespeichert? Das ist doch dann ein leerer String oder nicht? Also vergleichbar mit

String s = " "; oder?

Würde mir nämlich glaub ich weiter helfen. Es gibt ja die Möglichkeit, Groß und Kleinschreibung zu ignorieren, kann man dann auch einfach ein Leerzeichen aus s ignorieren?
 

JPKI

Top Contributor
Kommt drauf an, wie du den String bekommst. Wenn du JOptionPane benutzt, bekommst du "" als Rückgabewert wenn du Enter drückst.
Aber das erklärt die ClassCastException nicht! Poste mal den Code, wie du die Liste erstellst!
 

mobile

Bekanntes Mitglied
Code:
public void make() {	
		System.out.println();
		System.out.println("Disc Nummer: " + akMdnr);
		System.out.println("----------------");
		System.out.println();
		try {	
			for(byte i = 1; i <= MAX_TRACK ; i++) {	 
		 	    System.out.println("Track    : " + i);
				    
		 	    System.out.print("Interpret: ");
				String interpret = din.readLine();
				    
				System.out.print("Titel    : ");
				String titel = din.readLine();
						     
				System.out.print("Dauer    : ");
				String dauer = din.readLine();
				   			    
				System.out.println();
				
				//Neues Object von Disc wird angelegt und in Liste gepseichert
				Track track = new Track(interpret, titel, dauer);
				liste.add("" + track);
			}
			
			boolean save = false;
			while(save == false) {
				save = doSave();
			}
						
			//Liste wird serialisiert
			try {
				//Name für die List wird gebildet
				String listname = "Disc_";
				listname += String.valueOf(this.akMdnr);
				listname += ".ser";
			    
				FileOutputStream fs = new FileOutputStream(listname);
				ObjectOutputStream os = new ObjectOutputStream(fs);
				os.writeObject(liste);
				os.close();
				System.out.println("Disc wurde unter " + Make.mdnr + " gespeichert!");
			}
//...

in doSave() wird die eingabe von ja oder nein getestet.
 
R

Roar

Gast
liste.add("" + track);
das is mumpitz :autsch: wie kommst du auf sowas? damit fügst du der liste einen String und keinen Track hinzu.
 

JPKI

Top Contributor
Code:
list.add(track);
Ich geb's auf! Gegen so viel ****heit ist kein Kraut gewachsen :cry: :cool: :bloed: :noe:
 

Verjigorm

Top Contributor
auch wenn also wenn ich manchmal lese, was ihr hier so postet, dann hab ich teilweise echt Hemmungen etwas im ANFÄNGERFORUM zu fragen :bloed:

auch wenn einem hier sehr oft sehr schnell geholfen werden kann :)
 

JPKI

Top Contributor
Eigentlich sind wir hier immer gewillt zu helfen. Aber wenn sich jemand weigert, sich das Brett vorm Kopf zu entfernen, regt mich das auf.

Vor allem, wenn die Probleme so offensichtlich sind! Wer zu einer List einen String added (list.add(""+track) (!) :roll: ) und sich dann wundert, dass er beim Typecasting (Track track = (Track)list.get(int) :roll: ) eine ClassCastException bekommt, hat ein ziemliches Brett vorm Kopf.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G array vom typ object inhalt vergleichen Java Basics - Anfänger-Themen 3
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
thobren Object[][] Java Basics - Anfänger-Themen 8
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
T Object zu Char zu String Java Basics - Anfänger-Themen 6
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T Object in Array Java Basics - Anfänger-Themen 3
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
H Object an methode Java Basics - Anfänger-Themen 4
D Object -> String Java Basics - Anfänger-Themen 6
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
S Object Initialisierung Java Basics - Anfänger-Themen 7
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
D Object oder Primitiv Java Basics - Anfänger-Themen 10
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Fehlermeldung: the method.... ist undefined for the type object Java Basics - Anfänger-Themen 6
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3
M object cast auf double Java Basics - Anfänger-Themen 2
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
D Aus Object auslesen Java Basics - Anfänger-Themen 2
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
C mehrdimensionales Object sortieren Java Basics - Anfänger-Themen 4
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
T List.add(Object) führt zu NullPointerException Java Basics - Anfänger-Themen 14
F Wie kann ein Object[] zu Integer[] umwandeln? Java Basics - Anfänger-Themen 6
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
D Object auf JTextpane / jTextArea casten? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben