Also es geht um folgenes: Ich hab ein Kartenspiel erstellt und will jetzt Prüfen ob eine bestimmte Karte in meinem Stapel enthalten ist.
Jedoch wird mir immer geliefert, dass die Karte nicht enthalten ist. Ich habe bisher 2 Versionen:
Java:
publicvoidpruefung(Typ farbe,Wert wert){Card2Karte=newCard2(farbe, wert);if(Stapel.contains(Karte)){System.out.println("Die Karte "+Karte+" ist im Stapel enthalten.");}elseSystem.out.println("Die Karte "+Karte+" ist nicht im Stapel enthalten.");}
Java:
publicvoidpruefung(Typ farbe,Wert wert){Card2Karte=newCard2(farbe, wert);boolean kent =false;for(int i=0; i<Stapel.size(); i++){if((Stapel.get(i)).equals(Karte)){
kent =true;}}if(kent ==false){System.out.println("Die Karte "+Karte+" ist nicht im Stapel enthalten.");}elseSystem.out.println("Die Karte "+Karte+" ist im Stapel enthalten.");}
Jedoch funktioniert beides nicht. Mit contains() will es nicht und mit equals() auch nicht. Und mehr hab ich nicht im Internet gefunden... vor allem laut dem was ich im Internet gefunden habe, müsste es eigentlich mit contains() funktionieren, aber leider will es nicht. Also was kann ich jetzt noch probieren?
eine neue Karte erzeugst, isrt dieses Javaobjekt nicht in der Liste enthalten (Fall 1) und die equals Methode funktioniert nur wenndu sie überschrieben hast (Fall 2)
Wenn du equals nicht selbst implementierst, dann vergleicht java bei Objekten, ob die Objekt-ID gleich ist. Da die Karte im Stapel und die neu erzeugte Karte nicht die selbe ID haben, ist sie nicht im Stapel auffindbar.
Du musst also die Methode equals selbst implementieren.
E: Notiz an mich, nur 1 Tab zur gleichenzeit öffnen und durchlesen, dann kommen die Antworten nicht viel zu spät).
So implementiert kannst du auch contains verwenden. Ich würde dir aber raten, das Design nochmal zu überdenken. Eine neue Karte zu erzeugen nach dem der Stapel bereits befüllt wurde ist komisch und unrealistisch.
Ja stimmt schon ^^
Aber ich wusste nicht genau wie ich das machen soll wenn ich nur ein Objekt als Argument übergebe. Und im grunde muss es doch denk ich nur funktionieren...
So implementiert kannst du auch contains verwenden. Ich würde dir aber raten, das Design nochmal zu überdenken. Eine neue Karte zu erzeugen nach dem der Stapel bereits befüllt wurde ist komisch und unrealistisch.
Hmm~ naja, aber in meiner Aufgabe stand, ich soll eine Methode schreiben, der man eine Karte als Parameter übergibt und sie soll dann schauen ob diese auch im Stapel vorkommt. Und wenn ich da dann nicht ein neues Objekt vom Typ Card2 erstellt hab, dann hats nicht funktioniert.
Hmm~ naja, aber in meiner Aufgabe stand, ich soll eine Methode schreiben, der man eine Karte als Parameter übergibt und sie soll dann schauen ob diese auch im Stapel vorkommt.
Mit Casten kenn ich mich noch garnicht aus, ehrlich gesagt ^^
Muss ich mich noch einlesen ^^
Und ich muss das hier nur für die Uni machen und wenn ich dann eben nicht die volle Punktzahl bekomme, dann ists auch okay... find ich
Und nein, ich werd nie was für Herzschrittmacher programmieren xD
Was hat nichts funktioniert? Es hat ja allgemein nicht funktioniert. Die Liste kennt die Karte, und die Methode kennt die Karte, und es wird geschaut ob beide Karten ident sind. Wenn du ein Deck aus 52 Karten hast, und eine neue Karte aus einen anderen nimmst, wird diese Karte auch nicht im ursprünglichen Deck vorhanden sein, geht ja gar nicht. ^^
Du kannst nur schauen, ob eine Karte mit dem selben Wert und der Farbe vorkommt, was die equals macht. Aber nur zum prüfen ob eine Karte dabei ist hohlt man sich ja kein neues Kartenspiel, sondern verwendet eine Karte aus den ursprünglichen Karten zum Vergleich. (Recht komisch erklärt, aber ich hoffe es ist verständlich.)
Was hat nichts funktioniert? Es hat ja allgemein nicht funktioniert. Die Liste kennt die Karte, und die Methode kennt die Karte, und es wird geschaut ob beide Karten ident sind. Wenn du ein Deck aus 52 Karten hast, und eine neue Karte aus einen anderen nimmst, wird diese Karte auch nicht im ursprünglichen Deck vorhanden sein, geht ja gar nicht. ^^
Du kannst nur schauen, ob eine Karte mit dem selben Wert und der Farbe vorkommt, was die equals macht. Aber nur zum prüfen ob eine Karte dabei ist hohlt man sich ja kein neues Kartenspiel, sondern verwendet eine Karte aus den ursprünglichen Karten zum Vergleich. (Recht komisch erklärt, aber ich hoffe es ist verständlich.)
Ja es ist verständlich
Also war das mein Denkfehler bei der ersten Idee. Nur hatte ich es eben so verstanden, dass ich ein Deck habe. Dann zieht man ein paar Karten. Und dann sagt man, dass man wissen will, ob eine bestimmte Karte noch enthalten ist. Im Grunde könnte man es so auch über nen Umweg machen fällt mir grad ein... also indem man schaut wie groß der Stapel ist, wenn noch 52 Karten drin sind, dann muss sie noch drin sein und sonst schaut man ob man die Karte schon gezogen hat. Nur das dann zu implementieren... das ist mir zu hoch, da wüsst ich nicht wie und ich werds auch nich alles nochmal umschreiben xD