Permalänk
Medlem

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!!

Permalänk
Medlem
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.

Visa signatur

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

Permalänk
Medlem

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!!

Permalänk
Medlem
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.

Visa signatur

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

Permalänk
Medlem

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

Permalänk
Medlem
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.

Visa signatur

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

Permalänk
Medlem

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???

Permalänk
Medlem

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.

Permalänk

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.

Visa signatur

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

Permalänk
Medlem

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

Permalänk
Medlem

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)

Visa signatur

🖥 CPU:Intel Xeon E5-1650v2 @ 3.5 GHz GPU: MSI GeForce GTX 1060 3GB Minne:24 GB DDR3 ECC SSD: Samsung 840 EVO 500 GB 🖥️ Samsung UE55JU7005TXXE 4K 55"
🎮 Xbox Series X

Permalänk
Medlem

TACK!!!

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