[java] static/non-static conflict,bij space invdrs

Pagina: 1
Acties:

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
Ik kwam gisteren op het lumineuze idee om eens space invaders op mn rekenmachine te programmeren.. Nou bleek dat ik daar oa niet genoeg ruimte voor had, dus ben ik nu maar eens in javascript begonnen. Probleem:

Ik wilde eerst een beetje een basis opzetten, dus begon ik met een aantal classes (ship, alien, bullet, bomb <- extends bullet >:)). Nou moet een kogeltje normaal gesproken uit een schip komen, dus gebruik ik nu om de locatie van het schip te bepalen een 'getX()' (schip kan niet naar voor/achter) methode. Mijn probleem zit hem in het aanroepen van die methode:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class invaders extends Applet
{ public class ship
  { private int x = 100; //startlokatie van schip
    final int y = 15;

    public int getx()
    { return x;
    }

    public void beweeg(int hoever)
    { x = x + hoever;
    //repaint;
    }

    //action dead
    //action schiet
  }

  public class bullet
  { private int x;
    private int y;

    public void bullet()
    { x = ship.getx();
    y = 20;
    }

    //action destroy

De foutmelding: non-static method getx() could not be referenced from static context.

Ik heb hier al aantal klasgenoten en een leraar bij gehad (nee is niet voor school..) maar we komen er niet uit. Wat is hier fout aan?

Localhost is where the heart is


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
in linux wordt dat: Can't make static reference to method int getx() in inner class invaders. ship.

Localhost is where the heart is


  • Juup
  • Registratie: Februari 2000
  • Niet online
Lijkt verdacht veel op Java

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
js = java voor applet voor zover ik begrepen heb...

Localhost is where the heart is


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op donderdag 18 oktober 2001 16:07 schreef SilentStorm het volgende:
js = java voor applet voor zover ik begrepen heb...
Auw

dan moet je het toch maar eens goed gaan bekijken hoor :)

Doet iets met Cloud (MS/IBM)


Verwijderd

Java en JS is niet hetzelfde Roel >:)
Ik ben samen met SilentStorm bezig met die space invaders, maar de debugger van JBuilder 3 (ouwe crap :P) blijft maar zeuren over die functie/methode getx()...
D'r is niemand die echt een antwoord weet daarop, misschien zijn jullie wel zo intelligent :P

---Edit---
Je moet BTW ff de topic-title aanpassen :)
[JAVA] ipv [JS]

---Edit2---
tiepvaut |:( (Getx() moest getx() zijn :z)

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

zonder verder naar het programma gekeken te hebben:

een methode naam begint per conventie nooit met een hoofdletter..

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op donderdag 18 oktober 2001 16:13 schreef Rook het volgende:
Java en JS is niet hetzelfde Roel >:)
---Edit---
Je moet BTW ff de topic-title aanpassen :)
[JAVA] ipv [JS]
<ot>
done @ ACM

tnx :)

</ot>

Doet iets met Cloud (MS/IBM)


Verwijderd

Aannemende dat je Java bedoeld in plaats van java script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class invaders extends Applet
{ public class ship
  { private int x = 100; //startlokatie van schip
    final int y = 15;

    public ship()
    {}

    public int getx()
    { return x;
    }

    public void beweeg(int hoever)
    { x = x + hoever;
    //repaint;
    }

    //action dead
    //action schiet
  }

  public class bullet
  { private int x;
    private int y;

    public /*void*/ bullet()
    { ship ship1 = new ship();
    x = ship1.getx();
    y = 20;
    }

    //action destroy

Leg deze code eens naast jouw code, en zoek de verschillen.

edit:
Nou vooruit dan maar, ik zal het verklappen... :)
Je hebt constructors nodig om een object aan te maken. Die zag ik dus niet, dus heb ik ff toegevoegd.
Als je dan van een object een attribuut wilt weten (getX()), moe je wel eerst dat object aanmaken. Als je dat niet doet, en gelijk de class aanroept, dat krijg je inderdaad problemen met static en non-static.

Even over je programmatje, is het niet verstandiger om een bullet vanuit een ship aan te maken? Bijvoorbeeld in bullet een constructor zetten als
[code]public bullet(int x)[/code]

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
ow, thuis intussen :) xit hier nog.. zo naar werk.. sibbele wist t ook niet..

xie dat iemand topictitel heeft veranderd.. dank.

maarre iem. met enig id?

Localhost is where the heart is


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

ok, wat je dus doet is proberen een object method aan te roepen zonder dat je een object gemaakt hebt.

2 oplossingen:
1(zoals het hoord): maak eerst een object van schip aan en roep dan die method aan (btw classes moet je niet in classes zetten)

2: (smerig) maak de method getx static..

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 05:39
En de naam van een class wel... (met een HOOFDLETTER dus)

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
Op donderdag 18 oktober 2001 16:19 schreef GHOst. het volgende:
Even over je programmatje, is het niet verstandiger om een bullet vanuit een ship aan te maken? Bijvoorbeeld in bullet een constructor zetten als
code:
1
public bullet(int x)

[/edit]
dat was het plan, maar zie nu pas dat ik dan beter vanuit ship een variabele mee kan geven.. hmm..

Met die constructor (zat verkeerd en om te denken.. had m al wel in bullet..zie zin hierboven) begint ie nu te blaten dat ik nog geen body heb, maar ga ervan uit dat het wel werkt. 'k moet nu eerst naar werk, maar ga er morgen denk ik wel weer mee verder. bedankt voor alle hulp.

Localhost is where the heart is


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
k hij doet het!!! maar nu moet ik echt weg.. lees thuis reacties nog wel... (code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class invaders extends Applet
{ public class Ship
  { private int x = 100; //startlokatie van schip
    final int y = 15;

    public Ship()
    {//hier komt nog vanalles te staan..
    }

    public int getx()
    { return x;
    }

    public void beweeg(int hoever)
    { x = x + hoever;
    //repaint;
    }

    //action dead
    //action schiet
  }

  public class Bullet
  { private int x;
    private int y;

    public Bullet()
    { Ship ship1 = new Ship();
    x = Ship.getx();
    y = 20;
    }

    //action destroy

    public void beweeg (int hoever)
    { x = x + hoever;
    //repaint;
    }

    //action checkhit
  }

kun jij m ook ff koppie-en-peesten als je dr nog aan wilt werken. (Andere helft code doen we morgen verder nog wel...)

nogmaals: iedereen bedankt voor hulp.. *g* voel me weer 100% n00b..

Localhost is where the heart is


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

snap je ook waarom ie het doet?
anders heb je er geen &*&* aan

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
k weet wat het betekend. Heb goed boek en ook al enige delphi ervaring. Nu net periode met delphi aan het prutsen geweest, maar dan weet je er ook nog niet alles van.

De class is het framework, dat je eerst moet realiseren door de constructor te activeren (zit die er niet standaard 'leeg' in zoals delphi?).

Er was dus enige verwarring over de juiste syntax en overzicht. Ik kom er nu wel uit denk ik.. Duurt nog wel ff voor ie helemaal af is, though.. vrijdag-woensdag heb ik LAN, (2x) en rook doet aan 2e ook mee.. nja. zien wel..

Localhost is where the heart is


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Er is ook standaard een default constructor zonder parameters die niks doet behalve een instantie van het object aanmaken. Zo gauw als je zelf 1 constructor defineert die een parameter mee krijgt bestaat die default constructor niet meer en moet je dus zelf een constructor defineren zonder parameters om daar nog gebruik van te kunnen maken

“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.”

Pagina: 1