May 10, 2003
Jag håller på med ett program som ska spela kortspelet 21. Problemet är att jag får ett konstigt fel då jag komilerar:
"G:XerxesJavaFinal.java:45: non-static variable this cannot be referenced from a static context
kortlek[i] = new Spelkort(farg[1] + " " + valor[i], varde[i]);"
Någon som vet hur jag löser detta? Programmet ser ut som nedan:
public class Tjugoett
{
//Spelet
public static void main (String[] args)
{
//Kortdata
Spelkort[] kortlek = new Spelkort[52]; //Kortleken
String[] farg = {"Hjärter", "Spader", "Ruter", "Klöver",}; //Innhåller färg
String[] valor = {"Ess", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"Knekt", "Dam", "Kung"}; //Valörer
int[] varde = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10};
//Poäng
int poang=0; //Spelarens poäng
//Spelvariablar
boolean nyttkort = true; //Sålänge som sant dras nytt kort
int knr=0; //Kortnummer, håller reda på vilket som är nästa kort.
char val2; //Om J/j så dras nytt kort
//Skapa kortlek
//Skapar Hjärter
for(int i=0; i<13; i++)
{
kortlek[i] = new Spelkort(Kort(farg[0], valor[i]), varde[i]);
}
//Skapar Spader
for(int i=13; i<26; i++)
{
kortlek[i] = new Spelkort(Kort(farg[1], valor[i]), varde[i]);
}
//Skapar Ruter
for(int i=26; i<39; i++)
{
kortlek[i] = new Spelkort(Kort(farg[2], valor[i]), varde[i]);
}
//Skapar Klöver
for(int i=39; i<52; i++)
{
kortlek[i] = new Spelkort(Kort(farg[3], valor[i]), varde[i]);
}
//Blanda
for (int i=0; i<1000; i++)
{
int bland = (int) (Math.random() *52);
int bland2 = (int) (Math.random() *52);
Spelkort temp1 = kortlek[bland];
Spelkort temp2 = kortlek[bland2];
kortlek[bland] = temp2;
kortlek[bland2] = temp1;
}
//Spelet
char val;//Om J/j nytt = sant
boolean nytt = true; //Om sant - nytt spel
System.out.println("Tjugoett!");
while(nytt)
{
System.out.println("Vill du spela en omgang? (j/n)");
val = Keyboard.readChar();
knr=0;//Tömmer kortnummer efter varje spel så fältets kapacitet ej överskrids
if (val == 'j'|| val == 'J')
{
do
{
System.out.println("Vill du dra ett nytt kort? (j/n)");
val2 = Keyboard.readChar();
if(val2 == 'j'|| val2 == 'J')
{
System.out.println("Du drog " + kortlek[knr] + " och har "
+ poang + " poang.");
knr = knr+1;
}
else
{
nyttkort=false;
}
}
while(nyttkort && poang<=21);
}
else
{
nytt = false;
}
}
//Skriv ut kortlek
for(int i=0; i<52; i++)
{
System.out.println(kortlek[i]);
}
}
//Spelkortsklassen
class Spelkort
{
public String kort;
public int varde;
};
//Kortleksfunktion
static String Kort(String x, String y)
{
String kort;
kort = x + " " + y;
return kort;
}
}
March 20, 2003
tänka...tänka....
classen Spelkort verkar inte vara riktig
till att börja med bör alla fristående classer/funktioner ligga innan programmet sen har du ett semikolen efter classslut???
Det felet du får finns inte med i koden..så det är lite svårt...du tilldelar helt olika i kompileringen o du bör skapa kortleken i en konstruktor innan resten av programmet kör igång....
Kanske inte hjälper dig med just dit problem men lite tips på programmuppbyggnad iallafall (blir mkt lättare o felsöka då oxå)
1 Guest(s)