2011-11-23, 09:54
  #1
Medlem
Tja alla flashbacker, har ett projekt arbete och uppgiften är att skapa ett blackjack spel. Har kommit ganska långt men jag får alltid ett error och vet inte hur jag ska ändra i koden för att få det att fungera korrekt.
Här finns hela koden:

Snälla, jag önskar bara seriösa svar. Tack på förhand!
Citera
2011-11-23, 10:06
  #2
Medlem
kelebs avatar
Det vore ju också då vänligt om du talade om vad det är för fel du får.
Citera
2011-11-23, 10:13
  #3
Medlem
felmeddelandet blir:
Tjugoett.java:47: error: non-static variable this cannot be referenced from a static context
kortlek[i] = new Spelkort(Kort(farg[0], valor[i]), varde[i]);
Citera
2011-11-23, 11:41
  #4
Medlem
kelebs avatar
Citat:
Ursprungligen postat av racon1
felmeddelandet blir:
Tjugoett.java:47: error: non-static variable this cannot be referenced from a static context
kortlek[i] = new Spelkort(Kort(farg[0], valor[i]), varde[i]);

Just det felet du får kan jag inte riktigt sätta fingret på. Däremot har du andra fel vilka möjligtvis skulle kunna ge dig felet ovan som följdfel. En del saker gör du på klumpiga sätt och på sätt som kunde göras betydligt snyggare.

Nu kanske du redan har din kod indenterad där du skriver den och att du gjorde något fel när du skulle klistra in den här, men att indentera koden gör det enormt mycket lättare att läsa koden, speciellt för någon utomstående. Det gör också att man i princip eliminerar problem med måsvingar. Om din kod inte är indenterad, se till att få det gjort.

Det första "felet" du gör i min mening är att ha (nästintill) hela programmet i din main-metod. Det får till följd att alla variabler du gör blir statiska och att du bara kan göra statiska metodanrop och programmet blir betydligt mindre skalabart. Alternativet är att man använder main-metoden för att starta upp programmet för att sedan låta programmet köra sig själv.


Du använder dig av en intern klass Spelkort, vilken har två instansvariabler. Dock kan dessa inte sättas på något sätt. Du saknar en konstruktor för klassen. På nämnda felrad försöker du att anropa en konstruktor i klassen Spelkort som tar två strängar som argument. Detta borde generera ett fel om att du försöker anropa en konstruktor som inte finns, men skulle möjligtvis kunna få ditt fel som följdfel. Detta verkar vara ditt huvudproblem.

Vad gäller Kort-metod borde denna heta kort och inte Kort (gemen och inte versal första bokstav). Klasser skrivs enligt konvention med stor första bokstav medan metoder skrivs med liten första bokstav.

Så för att sammanfatta vad dina nästa steg borde vara:
- Indentera din kod
- Skapa den konstruktor till Spelkort du försöker att anropa i koden.
(mer frivilliga steg)
- Byt namn på Kort till kort
- Flytta ut din kod från main-metoden.

Jag kan tillägga att programmet även efter detta inte kommer att vara klart, men det är problem som tillhör själva uppgiften och som inte jag ska lösa åt dig.
Citera
2011-11-23, 12:07
  #5
Medlem
Du bör absolut läsa på lite grand om enum . Just att beskriva kort, är det exempel som ofta finns i Java-böcker, för att beskriva fördelen med enum.

Faktum är att när jag söker på Oracles egen dokumentation om enum, så är just kort med som exempel:

http://docs.oracle.com/javase/1.5.0/...age/enums.html

---------------------------------

Stacktracet från ditt fel säger att felet är på rad 47. Vad har du på rad 47?

Felet innebär att du är i en "statisk" kontext/metod (antagligen din main), d.v.s någonting du deklarerat som att det alltid skall finnas i minnet, som är beroende av någonting som du ej deklarerat som statiskt (d.v.s någonting som du måste instansiera för att det skall finnas).

Har två teorier:

1) Antagligen anropar du en objekt-metod i din main-klass, trots att du i just det läget inte har skapat/instansierat något objekt.
2) Alternativt så har du skapat ett objekt ( Object object = new Object() ) men när du skall anropa metoden så skriver du:

Object.callMethod()

istället för

object.callMethod()
__________________
Senast redigerad av Drubas 2011-11-23 kl. 12:15.
Citera
2011-11-25, 22:52
  #6
Medlem
Tooners avatar
Citat:
Ursprungligen postat av Drubas
1) Antagligen anropar du en objekt-metod i din main-klass, trots att du i just det läget inte har skapat/instansierat något objekt.
2) Alternativt så har du skapat ett objekt ( Object object = new Object() ) men när du skall anropa metoden så skriver du:

Object.callMethod()

istället för

object.callMethod()

Alternativ 2 ger bara en varning. Så helt klart alternativ 1.

Skapar du inte objekt av klassen kan du inte anropa icke-statiska metoder i den... easy as that.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in