Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du kunne f.eks. give hvert kort et unikt nr, som f.eks. 100 - 113 til ruder og 200 - 213 klør og derved sortere på tallet med f.eks. en Bubblesort, jeg ved ikke om Bubblesort er den bedste men det var lige den jeg kunne huske :-)
Ok, er det så iorden at man laver en klasse der hedder Kort;
public class Kort { private int key, nr; private String type;
public Kort(int, key, String type, int nr) { this.key = key; this.type = type; this.nr = nr; }
private int getKey(){ return this.key; } private int getNr(){ return this.nr; } private String getType(){ return this.type; } }
Og derefter skal du når du adder sige bunke.addElement(new Kort("100", "Klør", n));
Derefter finder du en sorteringsalgoritme der virker, jeg har ikke lige en ved hånden, eller du løber alle objekterne igennem med en for. Og tjekker størelsen og placeringen med kort.getKey().
Du kan også sortere dem med det samme ved at sige add(key, new Kort(key, "Klør", n)
Desuden har Collections også en Sort Collections.sort(bunke); Den sortere elementerne i Vector, problemet er bare at så skal du have en indikator foran, som f.eks. "101 Klør 1", så ville det også virke !
Man laver normalt aldrig sådanne noget i main() metoden, da den er statisk. Man kalder konstruktoren for klassen og kører på klasse niveau.
Vector bunke; bunke = new Vector();
Det gør man heller ikke. Man angiver altid interface typen, i stedet for klasse typen, så kan man MEGET lettere skift List type hvis man vil, og Vector anvender man også KUN hvis man vil sikre at metode kald er Syncronized, Vector er nemlig langsommere end ArrayList.
Så ovenstående skulle for at være korrekt nok nærmere være: List bunke; bunke = new ArrayList();
Selvfølgelig virker din udgave også, den performer bare dårligere og der er en alt for hård kobling imellem objekt og type,. som skaber problemmer senere evt.
Det er jeg fulstændig godt klar over, som jeg nok skrev tidligere så ville jeg selv have lavet det på en helt anden måde, men jeg tog bare udgangspunkt i hans kode og så bygget det derudfra. Men jeg er godt klar over at der er fejl og det kunne gøres på en anden måde :-)
Skal det absolut være en Vector? det er da ret overkill her.
// filen KortSpil.java
// **************** Klassen Kort // constructor // public Kort( int nummer ); // 0..51 // public Kort( String farve, String verdi ); // se arrays 'farver' og 'verdier' //metoder: // public int compareTo ( Kort b )// [-1,0,1] for [ a>b, a==b, a<b ] // public int getNummer(); //eg 40 // public String toString(); //eg: "klør-knægt"
private int kortNummer; // kort er nummereret fra 0 til 51
public Kort( int nummer ) { if ( nummer < 0 || nummer > 51 ) { System.out.println( "Ugyldig parameter til Kort ( "+nummer+" )\nbruger " +(nummer%52) ); } this.kortNummer = nummer % 52; } //endconstructor Kort( int )
public Kort( String farve, String verdi ) { int fIdx,vIdx; for ( fIdx=0; fIdx<farver.length; fIdx++) { if ( farver[fIdx].equals(farve) ) break; } if ( fIdx >= 4 ) { System.out.println( "Ugyldig parameter til Kort \""+farve+"\"\nbruger 0" ); fIdx = 0; } for ( vIdx=0; vIdx<verdier.length; vIdx++) { if ( verdier[vIdx].equals(verdi) ) break; } if ( vIdx >= 13 ) { System.out.println( "Ugyldig parameter til Kort \""+verdi+"\"\nbruger 0" ); vIdx = 0; } this.kortNummer = vIdx<<2 +fIdx; } //endconstructor Kort( String, String )
public int compareTo ( Kort b ) { if ( this.kortNummer == b.kortNummer ) return 0; if ( this.kortNummer > b.kortNummer ) return 1; return -1; } //endmethod compareTo
public int getNummer() { return kortNummer; } //endmethos getNummer
// **************** Klassen Spil // constructor // public Spil(); // opret kortspil med 52 kort //metoder // public void bland(); // blander kortene // public int reset(); // start forfra på samme bunke // public Kort giv(); // giv et kort fra bunken (eller null) // public boolean endOfSpil(); // true når alle kort gevet
class Spil { // testklasse for klassen kort.
public final static int ANTAL_KORT = 52; private Kort[] spil = new Kort[ANTAL_KORT]; private int neste;
public Spil() { for (int i=0; i<ANTAL_KORT; i++) { spil[i] = new Kort(i); } neste = 0; } //endconstructor KortSpil
public void bland() { int i,j; Kort tmp; for ( i=ANTAL_KORT-1; i>0; i--) { tmp = spil[i]; j = (int)Math.floor( Math.random() * i ); spil[i] = spil[j]; spil[j] = tmp; } neste = 0; } //endmethod bland
public int reset() { return ( neste = 0 ); } //endmethod reset
public Kort giv() { if ( neste < ANTAL_KORT ) { return spil[neste++]; } else { return null; } } //endmethod giv
public static void udskrivSpil( Spil s ) { s.reset(); int teller = 0; while ( ! s.endOfSpil() ) { System.out.print( s.giv().toString()+", " ); if ( ( ++teller & 3 ) == 0 ) { System.out.println(); } } System.out.println(); }
public static void main ( String[] args ) {
Spil s = new Spil(); udskrivSpil( s );
s.bland(); udskrivSpil( s );
} //endmethod main
} //endclass KortSpil
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.