2

I'm trying to call a method from a separate class in java but it doesn't seem to work, or I'm doing something wrong. What I want to achieve is to call my Race method which is in the RacingEvent class to my main program (Check the comment in the main program).

Here is the class:

import java.util.Random; public class RacingEvent { private SimpleWindow w; private RaceTrack track; private Turtle t1 = new Turtle(w, 200, 400); private Turtle t2 = new Turtle(w, 300, 400); public RacingEvent(RaceTrack track, Turtle t1, Turtle t2) { this.t1 = t1; this.t2 = t2; this.track = track; } public void Race() { t1.penDown(); t2.penDown(); Random rand = new Random(); Turtle t1 = new Turtle(w, 200, 400); Turtle t2 = new Turtle(w, 300, 400); while (t1.getY() > track.getyFinish() && t2.getY() > track.getyFinish()) { int turtle1 = rand.nextInt(3); int turtle2 = rand.nextInt(3); t1.forward(turtle1); t2.forward(turtle2); SimpleWindow.delay(10); } int diff1 = t1.getY() - track.getyFinish(); int diff2 = t2.getY() - track.getyFinish(); SimpleWindow w = new SimpleWindow(200, 100, "Winner"); if (t1.getY() <= track.getyFinish()) { w.moveTo(20, 40); w.writeText("T1 won with a " + diff2 + " step(s) lead!"); } else if (t2.getY() <= track.getyFinish()) { w.moveTo(20, 40); w.writeText("T2 won with a " + diff1 + " step(s) lead!"); } } } 

And here is the main program where I need to call the method:

public class TurtleRace { public static void main(String[] args) { SimpleWindow w = new SimpleWindow(600, 600, "TurtleRace"); int yStart = 400; int yFinish = 100; RaceTrack track = new RaceTrack(w, yStart, yFinish); ColorTurtle t1 = new ColorTurtle(w, 250, yStart, java.awt.Color.RED); ColorTurtle t2 = new ColorTurtle(w, 350, yStart, java.awt.Color.BLUE); track.draw(w); w.waitForMouseClick(); RacingEvent event = new RacingEvent(track, t1, t2); /*Call Race Method*/ } } 
9
  • What didn't seem to work? Show use what you tried? Commented Nov 20, 2012 at 18:00
  • 3
    You can't call event.Race(); ? Commented Nov 20, 2012 at 18:01
  • Tried it but then I get an java.lang.NullPointerException Commented Nov 20, 2012 at 18:03
  • @Rob where do you get NPE ?? Commented Nov 20, 2012 at 18:05
  • What is the call stack of the NPE? Commented Nov 20, 2012 at 18:05

3 Answers 3

2

When you do this

RacingEvent event = new RacingEvent(track, t1, t2); 

You are just creating and instantiating an object of the RacingEvent class.

The function call is yet to be made.

You should write this to call the function.

event.Race(); 

Hope it solves the problem.

Sign up to request clarification or add additional context in comments.

2 Comments

Did some minor modifications to my RacingEvent class but then I got it working. Thanks everyone!
Cool thing is that the accepted answer does not solve the problem :D
2

RacingEvent does not initialize its w field. You might want to pass the value that is available to the caller (called w there, too) to the constructor and set w to the argument passed in.

In detail:

Change the constructor to

public RacingEvent(SimpleWindow w, RaceTrack track, Turtle t1, Turtle t2) { this.w = w; this.t1 = t1; this.t2 = t2; this.track = track; } 

and call it like this:

 RacingEvent event = new RacingEvent(w, track, t1, t2); event.race(); 

1 Comment

+1 Oh you are correct. It's being used at ` Turtle t1 = new Turtle(w, 200, 400);` before initialization.
0

Simplified solution:

import java.awt.*; import java.util.Random; class SimpleWindow { public SimpleWindow(int i, int i1, String winner) { //To change body of created methods use File | Settings | File Templates. } public static void delay(int i) { //To change body of created methods use File | Settings | File Templates. } public void moveTo(int i, int i1) { //To change body of created methods use File | Settings | File Templates. } public void writeText(String s) { //To change body of created methods use File | Settings | File Templates. } public void waitForMouseClick() { //To change body of created methods use File | Settings | File Templates. } } class ColorTurtle extends Turtle { public ColorTurtle(SimpleWindow w, int i, int yStart, Color red) { //To change body of created methods use File | Settings | File Templates. } public ColorTurtle(SimpleWindow w, int i, int i1) { super(w, i, i1); } } class RaceTrack { private int yFinish; public RaceTrack(SimpleWindow w, int yStart, int yFinish) { //To change body of created methods use File | Settings | File Templates. } public int getyFinish() { return yFinish; } public void draw(SimpleWindow w) { //To change body of created methods use File | Settings | File Templates. } } class Turtle { private int y; public Turtle(SimpleWindow w, int i, int i1) { //To change body of created methods use File | Settings | File Templates. } Turtle() { } public void penDown() { //To change body of created methods use File | Settings | File Templates. } public int getY() { return y; } public void forward(int turtle1) { //To change body of created methods use File | Settings | File Templates. } } class RacingEvent { private SimpleWindow w; private RaceTrack track; private Turtle t1 = new Turtle(w, 200, 400); private Turtle t2 = new Turtle(w, 300, 400); public RacingEvent(RaceTrack track, Turtle t1, Turtle t2) { this.t1 = t1; this.t2 = t2; this.track = track; } public void Race() { t1.penDown(); t2.penDown(); Random rand = new Random(); Turtle t1 = new Turtle(w, 200, 400); Turtle t2 = new Turtle(w, 300, 400); while (t1.getY() > track.getyFinish() && t2.getY() > track.getyFinish()) { int turtle1 = rand.nextInt(3); int turtle2 = rand.nextInt(3); t1.forward(turtle1); t2.forward(turtle2); SimpleWindow.delay(10); } int diff1 = t1.getY() - track.getyFinish(); int diff2 = t2.getY() - track.getyFinish(); SimpleWindow w = new SimpleWindow(200, 100, "Winner"); if (t1.getY() <= track.getyFinish()) { w.moveTo(20, 40); w.writeText("T1 won with a " + diff2 + " step(s) lead!"); } else if (t2.getY() <= track.getyFinish()) { w.moveTo(20, 40); w.writeText("T2 won with a " + diff1 + " step(s) lead!"); } } } public class TurtleRace { public static void main(String[] args) { SimpleWindow w = new SimpleWindow(600, 600, "TurtleRace"); int yStart = 400; int yFinish = 100; RaceTrack track = new RaceTrack(w, yStart, yFinish); ColorTurtle t1 = new ColorTurtle(w, 250, yStart, java.awt.Color.RED); ColorTurtle t2 = new ColorTurtle(w, 350, yStart, java.awt.Color.BLUE); track.draw(w); w.waitForMouseClick(); RacingEvent event = new RacingEvent(track, t1, t2); /*Call Race Method*/ event.Race(); } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.