有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何从单独的java类调用方法

我试图在java中从一个单独的类调用一个方法,但它似乎不起作用,或者我做错了什么。我想要实现的是将Race类中的RacingEvent方法调用到我的主程序(检查主程序中的注释)

下面是课堂:

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!");
        }
    }
}

这是我需要调用方法的主程序:

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*/
    }
}

共 (3) 个答案

  1. # 1 楼答案

    RacingEvent不初始化其w字段。您可能希望将调用者可用的值(在那里也被称为w)传递给构造函数,并将w设置为传入的参数

    详细内容:

    将构造函数更改为

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

    这样称呼:

     RacingEvent event = new RacingEvent(w, track, t1, t2);
     event.race();
    
  2. # 2 楼答案

    当你这么做的时候

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

    您只是在创建和实例化RacingEvent类的一个对象

    函数调用尚未完成

    你应该写这个来调用函数

    event.Race();
    

    希望它能解决问题

  3. # 3 楼答案

    简化的解决方案:

    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();
      }
    }