Toon posts:

[java] non-static en static probleem.

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allemaal,

Wij zijn op school bezig met een opdracht over kunstmatige intiligentie.
We hebben een robotje in een map en die mag geen botsing maken met een muur.
Hij beweegt zich voor met informatie wat hij krijgt van z'n laser.

Nu hebben we in de klasse Laser een methode pointToObstacle().
In deze methode heb ik 3 double die ik en de klasse Controller wil gebruiken.
Maar dan krijg ik dus de melding:"Cannot make a static reference to the non-static field Laser.fDistance"

ik moet dus in controller de double's fDistance lDistance en rDistance hebben.
Deze zijn non-static in de klasse Laser. (static maken heeft geen zin).

Een instantie maken lukt me niet omdat laser extends Device en Device implements runnable denk ik ofzo.

Plz help. morguh is de deathline.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zou je wat relevante(!) code kunnen plaatsen, want hier kunnen we weinig mee.
Verder is "Plz help. morguh is de deathline." nogal overbodig. Ten eerste zitten we hier niet om jou uit de brand te helpen en ten tweede had je maar op tijd aan je opdracht moeten beginnen. Je kunt natuurlijk ook gewoon even bij je leraar of medeklasgenoten terecht voor dit soort vragen lijkt me.

Los daarvan: Heb je al gegoogled? Want er is zat over te vinden lijkt me.

[ Voor 20% gewijzigd door RobIII op 11-10-2006 15:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:26
Eh, wees eens iets duidelijker ?
Als je een dergelijke foutmelding hebt, dan is het gewoon zo dat je :
ofwel de member static moet maken
ofwel een instance moet instantieren om die member te kunnen gebruiken.

Hoe roep je die pointToObstacle method aan ? Die 3 doubles zijn gedeclareerd in je pointToObst method ?
En wat bedoel je met 'ik wil die 3 doubles gebruiken in m'n class Controller ? Je Controller class moet die 3 doubles krijgen vanuit de pointToObstacle method ?
Plz help. morguh is de deathline.
Tja, dat kan, maar dergelijke opmerkingen zullen je niet helpen bij het meer / sneller krijgen van hulp.

Il ne sert à rien de courir, if faut partir à point

[ Voor 4% gewijzigd door whoami op 11-10-2006 15:16 ]

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
als je iets van een instantie van een Laser wilt weten ( Want het is niet static ) zul je moeten zorgen dat je een referentie hebt van Laser. Waarschijnlijk heb je in je Controller een referentie naar je Robot en de Robot heeft waarschijnlijk weer een referentie naar de Laser ( Of iets in die strekking ). Je Controller zal dan iets moeten doen als myRobot.getLaser().getVariabeleDieJeWiltHebben();

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
ok, sorry voor het slechte uitleg.
En ja ik heb google doorgespit maar zo goed ben ik ook weer niet met google;p.
Zover ik weet ligt het eraan dat ik het niet voor elkaar krijgt om een instantie van Laser krijg.
Hier ff snel een oude deel klasse diagram
Afbeeldingslocatie: http://img204.imageshack.us/my.php?image=klassediagrammw5.jpg

ik hoop dat het zo wat duidelijker is voor het helpen hoe ik een instantie kan maken van Laser.

[ Voor 3% gewijzigd door Verwijderd op 11-10-2006 16:06 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:08

gorgi_19

Kruimeltjes zijn weer op :9

En verwacht je dat we dit kunnen lezen? :?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • martennis
  • Registratie: Juli 2005
  • Laatst online: 16-01 14:17
waarom heeft static maken geen zin dan? dan zou het probleem namelijk opgelost zijn (tenzij je meerdere Laser klasses gebruikt)

  • rblok
  • Registratie: Juni 2002
  • Laatst online: 02-12-2025
De enige methode om dit soor waarden te ontsluiten is dan om de waarden in de double's fDistance lDistance en rDistance te ontsluiten met GET-methoden
En daarvoor heb je een instantie nodig van Laser.
Omdat de waarden voor de distance variabel zijn en niet static kunnen deze alleen op deze manier opgehaald worden

Dus
Java:
1
2
3
4
public double getlDistance()
{
  return lDistance
}

Walking on water and developing software from a specification are easy if both are frozen. - Edward V Berard


Verwijderd

Topicstarter
dit heb ik zelf ook al geprobeerd maar dan moet je nog steeds een instantie maken toch??
en dit lukt niet :S door een of andere reden. :O

Want dan doe ik gewoon Laser.GetlDistence dan geeft die alsnog de fout.
want er moet een instantie worden gemaakt wat niet lukt :S

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:26

Creepy

Tactical Espionage Splatterer

Laser is nog steeds je class en geen instantie.
Maar wat lukt er niet met het aanmaken van een instantie dan? Hoe spreek je die Laser nu aan dan? Is er uberhaupt al ergens een instantie van die class Laser? Alleen melden dat het niet lukt maakt het voor ons niet duidelijker ;) Geef dan aan wat er niet lukt en waarom niet (foutmelding? etc.).

Daarnaast: geef nu eens wat relevante code zodat we een duidelijker beeld krijgen. Ik begin nu namelijk het idee te krijgen dat je niet helemaal het verschil weet tussen instanties en classes. iets wat voor OO ontwikkelen een redelijke basiskennis is.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • martennis
  • Registratie: Juli 2005
  • Laatst online: 16-01 14:17
paar vragen:

waarom kun je geen instantie maken?
waarom kun je de variabelen niet static maken?
hoe gebruik je de (rest van de) klasse Laser in het programma? (Het lijkt mij dat je meer methoden en/of variabelen in je klasse hebt die je nu al wel gebruikt. En dan is de vraag, zijn die methoden ook static of niet?)

misschien is wat code ook wel handig (dan kunnen wij ook kijken hoe je programma in elkaar steekt, wat op dit moment nogal vaag is)

edit: te laat.. creepy was me net voor :X ;)

[ Voor 4% gewijzigd door martennis op 11-10-2006 16:50 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

gorgi_19 schreef op woensdag 11 oktober 2006 @ 15:58:
[...]

En verwacht je dat we dit kunnen lezen? :?
:D
Blijkbaar heeft ie de thumbnail-url gepost, deze werkt beter.

.edit: hmm blijkbaar was er al geedit 8)7

[ Voor 12% gewijzigd door .oisyn op 11-10-2006 17:35 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • martennis
  • Registratie: Juli 2005
  • Laatst online: 16-01 14:17
offtopic: ik dacht dat het vandaag af moest :?

  • Nick The Heazk
  • Registratie: Maart 2004
  • Laatst online: 07-09-2024

Nick The Heazk

Zie jij er wat in?

Verwijderd schreef op woensdag 11 oktober 2006 @ 15:08:
Maar dan krijg ik dus de melding:"Cannot make a static reference to the non-static field Laser.fDistance"
Ik vermoed dat je deze code hebt:
Java:
1
2
3
[...]
double mijnVarDieIkWil = Laser.fDistance;
[...]


Terwijl de implementatie van Laser er als volgt uitziet:
Java:
1
2
3
[...]
public double fDistance = [...];
[...]


Dat is namelijk wat die error probeert duidelijk te maken. Je gebruikt een statische referentie naar een veld dat helemaal niet statisch is. De oplossing ligt voor de hand: je moet de klasse Laser instantiëren (een nieuw object maken), en van die instantie kan je dan fDistance opvragen. Desalniettemin gebruik je beter een getter voor dit soort zaken.
Ik vermoed hoop dat je school ondermeer de klasse Laser heeft geschreven, en dat je de broncode niet tot je beschikking hebt? Zoniet; dan vraag ik me serieus af hoe het komt dat je dan wel een relatief ingewikkeld klassenschema hebt, maar er niet in slaagt om een statische aanroep van een niet-statische te scheiden.

Performance is a residue of good design.


  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Er moet ook nog een sonar in (tenminste, ik herken de opdracht iig), wil je daar apart ook nog AI gaan inbouwen?

Je hebt de occupancyMap, daarin komen alle gescande blokjes te staan (zie char grid[][] in die class), op basis daarvan zul je de AI moeten bouwen :). Vanuit de controller kun je de robot aansturen (commando's sturen via de println-functie van Robot), daar ken je ook de juiste instantie van occupancyMap.

Laser is idd al werkend geleverd :). Deze heeft als parent de Device-class, de robot-class heeft een aantal devices.

[ Voor 3% gewijzigd door Shadowman op 11-10-2006 23:02 ]


  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 03-02 20:14
Misschien kan het ook geen kwaad om een juiste UML notatie te gebruiken.

Een generalisatie teken je met volle lijn en een driehoekje
Associatie teken je best met een diamantje een de ene kant, al dan niet opgevuld afhankelijk of hij het ene object verantwoordelijk is voor de creatie en vernietiging van zijn ander eind (de kant zonder diamantje).

"Live as if you were to die tomorrow. Learn as if you were to live forever"

Pagina: 1