Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Equals / == samt operator overloading

Postades av 2005-04-26 20:30:10 - Per Hultqvist, i forum c# (c-sharp), Tråden har 5 Kommentarer och lästs av 828 personer

Hej,

Sitter och skriver ett litet pokerprogram och har stött på ett område där mina kunskaper brister en aning, och behöver nu lite råd. Eftersom man i poker jämför kort med varandra och händer med varandra så tyckte jag det var lämpligt att börja överlagra lite operatorer, t ex >= och <=, samt == och !=. Jag vill alltså kunna skriva typ :

if (hand1==hand2)
   ...

if (hand1.Cards[0]<hand2.Cards[0])
   ...

Detta för att göra koden som avgör vilken hand som vinner lite snyggare.

Min första tanke var att man bara jämför kortets valör och struntar i färgen, dvs en sjua är lägre än en kung, och spader kung är lika med ruter kung. Men att definiera == leder ju till att VS vill att du skall överlagra Equals/GetHashCode också, och då börjar jag fundera på om det är så vettigt att definiera spader kung som LIKA MED ruter kung!?

Låt säga att jag skulle definiera == samt Equals/GetHashCode på så sätt att jag bara jämför valörerna enligt ovan, får jag inte problem då om jag t ex skapar en klass som heter Deck (kortlek) som ärver av en generisk typ (t ex SortedList) som har metoder typ Contains() (för att kolla om ett kort finns i leken)? Använder inte ramverket Equals för att avgöra om elementet finns genom att anropa Equals()?. [Edit : Sitter med VS2005 beta 2 och labbar, därav snacket om generiska klasser, men exemplet gäller väl även utan generiska klasser]

Samma problem uppstår ju med klassen Hand som representerar en pokerhand. Om t ex två personer har Royal Straight Flush så splittas ju potten enligt pokerreglerna (glöm det där med att färgerna är rankade Hjärter,Spader, Ruter, Klöver), och här skulle jag eventuellt vilja överlagra operatorn == så att Hand1==Hand2. Men att de är identiska enligt pokerregler innebär ju inte att händerna ur objektshänseende är identiska.

Är detta helt enkelt ett dumt tillfälle att blanda in operator overloading? Borde jag nöja mig med att implementera IComparable och strunta i operatorerna?


Svara

Sv: Equals / == samt operator overloading

Postades av 2005-04-27 08:39:51 - Johan Bovin

En liten fundering bara, borde du inte kunna skilja på kortet som sådant och kortets pokervärde. Rent konceptuellt skulle du ju kunna återanvända dina kort och din hand till att spela olika typer av kortspel då.

T.ex. skulle du kunna ha en property typ Value och sen jämför du dem

if (hand1.Cards[0].Value<hand2.Cards[0].Value)


Då kan du ju skilja på sjlva instansen av kortet och dess pokervärde. Sen i Value kan du ju även där leka med generiska klasser eller interface så att du kan få till olika spel ;-)

Lite funderingar på morgonkvisten


Svara

Sv:Equals / == samt operator overloading

Postades av 2005-04-27 19:02:57 - Niklas Jansson

Om man ser det ur programmatisk synvinkel är det nog lämpligt att definiera < som att spader<hjärter eller liknande. Tänk till exempel på om du vill sortera korten. I C++ använder iaf de inbyggda behållarna <, > osv., för att kunna utföra sorteringar. En sortering bör väl låta varje kort ha en unik position i detta fallet?


Svara

Sv: Equals / == samt operator overloading

Postades av 2005-05-03 08:17:22 - Johan Bovin

Vad blev lösningen?


Svara

Sv:Equals / == samt operator overloading

Postades av 2005-05-03 09:23:43 - Andreas Håkansson

Ja fy på dig Per att inte dela med dig ;)


Svara

Sv:Equals / == samt operator overloading

Postades av 2005-05-03 10:08:15 - Per Hultqvist

Oops...lösningen blev att jag implementerar operatorn == så som den "bör" fungera, dvs ruter 7 == ruter 7 men ruter 7 != spader7. För att göra jämföra suit och rank använder jag egenskaperna Suit och Rank (enumeratorer) i stället. Jag struntar helt i att implementera < och > för Card och Hand. Däremot implementerade jag IComparable på Hand-objektet och i CompareTo så la jag in logiken för vilken hand som är bäst. För att jämföra två händer skriver jag alltså :

if (hand1.CompareTo(hand2)>0)
   ...

Känns inte som att detta är en perfekt lösning, men ibland måste man bita ihop och gå vidare.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 165
27 952
271 704
734
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies