Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2009

Kortlek i Java

Hej allihopa!!

Jag skulle verkligen uppskatta lite hjälp..det har kört fast sig riktigt riktigt ordentligt och deadline kommer inom väldigt kort.

Jag skall göra en klass som heter kortlek, den ska kunna blanda och dra det översta kortet.
Jag skall även göra ett progam som skriver ut vad det är för slags kort som blir draget.

Så här långt har jag kommit..

public class Kortlek { public static void main (String args[]){ int antalKort; String [] färg = { "Ruter", "Spader", "Klöver", "Hjärter"}; String [] valör = { "Joker", "ess", "två", "tre", "fyra", "fem", "sex", "sju", "åtta", "nio", "tio", "knäck","dam", "kung"}; Kort []kort = new Kort [52]; for ( int färg = 0; <färg.length; färg++ ) { for ( int valör = 1; <valör.lenght;valör++ ) { kort [antalKort] = new Card(valör,färg[färg]); antalKort ++; } } } } --------------------------------------------------------------------------- public class Kort { private KortFärg f; private KortValör; public Kort( KortFärg färg, KortValör valör){ f= färg; v= valör } public KortFärg(){ return f } public KortValör(){ return v; } public String toString() { return f.toString() + " " + s.toString(); } } }

Jag skulle uppskatta all hjälp jag kan få och blir inte arg om ifall någon har en lösning där hela eller stora delar av koden behövs skrivas om.

Tack, så otroligt mycket!!

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Citat:

Ursprungligen inskrivet av mrmato
Hej allihopa!!

Jag skulle verkligen uppskatta lite hjälp..det har kört fast sig riktigt riktigt ordentligt och deadline kommer inom väldigt kort.

Jag skall göra en klass som heter kortlek, den ska kunna blanda och dra det översta kortet.
Jag skall även göra ett progam som skriver ut vad det är för slags kort som blir draget.

Så här långt har jag kommit..

Jag skulle uppskatta all hjälp jag kan få och blir inte arg om ifall någon har en lösning där hela eller stora delar av koden behövs skrivas om.

Tack, så otroligt mycket!!

Sätt kort som en instansvariabel i klassen Kortlek. (Jag skulle döpa om variabeln till kortlek).

public Kort[] shuffleDeck() { Collections.shuffle(Arrays.asList(kort)); } public Kort getFirstCard() { return kort[0]; }

Edit: Missade ett mellanslag.

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2009

Tack för det snabba svaret!

En annan sak, när jag kör programmet får jag olika felmedelanden;

Kortlek.java:26: > expected for ( int fõrg = 0; <fõrg.length; fõrg++ ) ^ Kortlek.java:26: ';' expected for ( int fõrg = 0; <fõrg.length; fõrg++ ) ^ Kortlek.java:26: illegal start of expression for ( int fõrg = 0; <fõrg.length; fõrg++ ) ^ Kortlek.java:28: > expected for ( int val÷r = 1; <val÷r.lenght;val÷r++ ) ^ Kortlek.java:28: ';' expected for ( int val÷r = 1; <val÷r.lenght;val÷r++ ) ^ Kortlek.java:28: illegal start of expression for ( int val÷r = 1; <val÷r.lenght;val÷r++ )

Vad kan det bero på??

Tack igen för hjälpen!!

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Citat:

Ursprungligen inskrivet av mrmato
Tack för det snabba svaret!

En annan sak, när jag kör programmet får jag olika felmedelanden;

Kortlek.java:26: > expected for ( int fõrg = 0; <fõrg.length; fõrg++ ) ^ Kortlek.java:26: ';' expected for ( int fõrg = 0; <fõrg.length; fõrg++ ) ^ Kortlek.java:26: illegal start of expression for ( int fõrg = 0; <fõrg.length; fõrg++ ) ^ Kortlek.java:28: > expected for ( int val÷r = 1; <val÷r.lenght;val÷r++ ) ^ Kortlek.java:28: ';' expected for ( int val÷r = 1; <val÷r.lenght;val÷r++ ) ^ Kortlek.java:28: illegal start of expression for ( int val÷r = 1; <val÷r.lenght;val÷r++ )

Vad kan det bero på??

Tack igen för hjälpen!!

Om du tittar på denna kod och följer de tre stegen så ser du att det är knasigt:

for ( int färg = 0; <färg.length; färg++ )

instansiering; terminering; inkrementering (initialization; termination; increment)

Instansiering = Ok
Terminering = INTE Ok
Inkrementering = Ok

Med andra ord så gör du inte en jämförelse i termineringen, vilket du måste.

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2009

Tack igen...man blir blind efter X-antal timmar framför skärmen och läroboken.

Det går betydligt bättre nu...men...

När jag kör programmet får jag utskriften;
[Ljava.lang.String;@19821f
[Ljava.lang.String;@addbf1
[Ljava.lang.String;@19821f
osv..

Jag har gjort en del ändringar:

public class Kortlek { public Kort[] shuffleDeck() { Object kort = null; Collections.shuffle(Arrays.asList(kort)); return null; } public Kort getFirstCard() { Kort[] kort = null; return kort[0]; } public static void main (String args[]){ int antalKort=0; String [] färg = { "Ruter", "Spader", "Klöver", "Hjärter"}; String [] valör = { "Joker", "ess", "två", "tre", "fyra", "fem", "sex", "sju", "åtta", "nio", "tio", "knäck","dam", "kung"}; Kort []kort = new Kort [52]; for ( int f = 0; f <färg.length; f++ ) { for (int v = 1; v <valör.length; v++ ) { kort [antalKort] = new Kort(valör,färg); antalKort ++; } if (antalKort<52){ System.out.println(färg); System.out.println(valör); } } } } --------------------------------------------------------------------------------------------- public class Kort { private String f, v; public Kort(String[] valör, String[] färg) { } public void färg(String färg){ String färger = null; f = färger; } public void valör(String valör){ String valörer = null; v = valörer; } }

Några tips?? och tack än en gång

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Citat:

Ursprungligen inskrivet av mrmato
Tack igen...man blir blind efter X-antal timmar framför skärmen och läroboken.

Det går betydligt bättre nu...men...

När jag kör programmet får jag utskriften;
[Ljava.lang.String;@19821f
[Ljava.lang.String;@addbf1
[Ljava.lang.String;@19821f
osv..

Jag har gjort en del ändringar:

public class Kortlek { public Kort[] shuffleDeck() { Object kort = null; Collections.shuffle(Arrays.asList(kort)); return null; } public Kort getFirstCard() { Kort[] kort = null; return kort[0]; } public static void main (String args[]){ int antalKort=0; String [] färg = { "Ruter", "Spader", "Klöver", "Hjärter"}; String [] valör = { "Joker", "ess", "två", "tre", "fyra", "fem", "sex", "sju", "åtta", "nio", "tio", "knäck","dam", "kung"}; Kort []kort = new Kort [52]; for ( int f = 0; f <färg.length; f++ ) { for (int v = 1; v <valör.length; v++ ) { kort [antalKort] = new Kort(valör,färg); antalKort ++; } if (antalKort<52){ System.out.println(färg); System.out.println(valör); } } } } --------------------------------------------------------------------------------------------- public class Kort { private String f, v; public Kort(String[] valör, String[] färg) { } public void färg(String färg){ String färger = null; f = färger; } public void valör(String valör){ String valörer = null; v = valörer; } }

Några tips?? och tack än en gång

public Kort[] shuffleDeck() { Object kort = null; Collections.shuffle(Arrays.asList(kort)); return null; } public Kort getFirstCard() { Kort[] kort = null; return kort[0]; }

Dessa metoder gör ju ingenting. De använder inte instansvariabler, inga argument eller metoder. De returnerar även null, vilket gör dem helt meningslösa... Varför?

Din Kort-klass gör inget heller. Konstruktorn är tom. Du kallar inte på "new Kort()" i for-loopen, du kallar på new Card, en klass du inte har. Det är mycket som fattas. Är detta skoluppgift eller vill du bara lära dig?

Gör ett steg i taget. Gör Kort-klassen och skapa några enkla kort i en annan klass och testa hämta ut värden från dem.

Du lär dig inte mycket om jag gör detta åt dig, om du inte lusläser koden och förstår dig på den.

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2009

Ok..nu har jag gjort om allt, men det fungerar fortfarande inte

class Kortlek { private Kort[] bunt = new Kort[52]; private int antal = 0; public int geAntal() { return antal; } public void laggOverst(Kort k) { bunt[antal] = k; antal++; } public Kort geOversta() { antal−−; return bunt[antal]; } public void görKortlek() { for (int f=1; f<=4; f++) for (int v=1; v<=13; v++) laggOverst(new Kort(f, v)); } public void blanda() { for (int i=0; i<antal; i++) { int n = i + (int)(Math.random() * (antal − i)); Kort temp = bunt[n]; bunt[n] = bunt[i]; bunt[i] = temp; } } public static void main( String args[] ){ Kortlek kortlek = new Kortlek(); kortlek.görKortlek(); kortlek.blanda(); kortlek.geOversta(); System.out.println(kortlek.toString()); } }

class Kort { private static String[] fargNamn ={"Hjarter", "Spader", "Ruter", "Klover"}; private static String[] valorNamn ={"Ess", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Knekt", "Dam", "Kung"}; private int f, v; public Kort(int farg, int valor) { if (farg < 1 || farg > 4 || valor < 1 || valor > 13) { System.out.println("fel"); System.exit(1); } f = farg; v = valor; } public int geFarg() { return f; } public int geValor() { return v; } public String toString() { return fargNamn[f − 1] + " " + valorNamn[v − 1]; } }

När jag koplimerar, kommer följande print; Kortlek@42e816

Något tips???

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2004

Mitt tips är att göra något enklare. Att göra något du absolut inte kan är dumt. Då är det bättre att göra något du precis inte kan. Då blir inlärningströskeln mindre och "belöningen" blir oftare.

Trädvy Permalänk
Medlem
Plats
västragötalands län
Registrerad
Jan 2008

väl det är ännu en chalmerist som inte gillar eller kan programmera i Java..

Hade samma uppgift för ett eller 2 år sedan.. hatade den men klarade det med hjälp av handledaren..

Handledningstillfällen äger.. använd dessa.

Vattenkyld AMD 955 och ATI 4890 xXx
inbyggd i ett Armor chassie

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2009

problemet är att den ska vara färdig imorgon...så snälla någon..

Trädvy Permalänk
Medlem
Plats
Simrishamn
Registrerad
Jan 2009

Prova följande ändringar:

public static void main( String args[] ){

Kortlek kortlek = new Kortlek();
kortlek.görKortlek();
kortlek.blanda();
Kort k = kortlek.geOversta();
System.out.println(k.toString());
}

Egentligen bör du inte använda en array i Kortlek-klassen för att representera din kortlek. Mycket effektivare att använda en stack.

Stack<Kort> bunt= new Stack<Kort>();

Problemet är kanske att du inte kommit så långt i dina programmeringskunskaper för att kunna använda sådana datastrukturer?

Man lägger ett kort på stacken (överst i en hög) så här:
bunt.add(new Kort(f,v);

Man tar ett kort överst i stacken så här:
Kort k=bunt.pop();

Hoppas något löste sig och att du kanske lärde dig nåt nytt!

Mvh Hobbes75 (Java-/Eclipse-utvecklare i Skåne)

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2009

TACK!!!

Så enkel det kan vara ibland..nu kan jag äntligen gå och lägga mig på soffan och vila ut