-1

我正在尝试创建课程并且已经部分成功。但是当我尝试在我的作品中创建东西时,我main method所做的几乎所有事情都会出现这些错误。如果我改为在其他方法中创建这些东西,然后从我的 main 方法中调用它们,它就可以工作。

但这不是我应该做的,所以我需要修复它,以便主要方法中的内容有效。我得到的第一个错误是当我尝试在我的主对象中创建对象 turtle t1 时,我得到了错误Cannot make a static reference to the non-static field Ystart

import java.util.Random;
import se.lth.cs.window.SimpleWindow;
public class Racetrack {
Random rand = new Random();
int i = 0;
int x;
int Ystart;
int Ygoal;
int RaceTrack;
//SimpleWindow w = new SimpleWindow(500, 500, "22niggs");



public static void main(String[]args) {
    SimpleWindow w = new SimpleWindow(500, 500, "Angels");

    Racetrack race = new Racetrack(100,400);
    race.draw(w);
    Turtle t1 = new Turtle(w,50,Ystart);
    Turtle t2 = new Turtle(w,400,Ystart);
    t1.penDown();
    t2.penDown();
    while(i==0){
    x=rand.nextInt(10); 
    t1.forward(x);
    x = rand.nextInt(5);
    t2.forward(x);
    SimpleWindow.delay(100 );
    }

}

    public Racetrack(int Ystart, int Ygoal){ //KONSTRUKTOR
    this.Ystart =Ystart;
    this.Ygoal = Ygoal; 


    }
    public void draw(SimpleWindow w){

    w.moveTo(50, Ystart);
    w.lineTo(450, Ystart);
    w.moveTo(50, Ygoal);
    w.lineTo(450, Ygoal);

    }
    public void RacingEvent(Racetrack track, Turtle t1, Turtle t2){


    }
4

3 回答 3

0

静态方法或字段作为类的一部分存在,独立于该类的实例。非静态方法或字段取决于此类实例的存在。因此,您可以在对象上调用非静态方法,例如race.draw(),您可以从类中调用静态方法,例如Racetrack.main(new String[]{"one", "two", "three"});.

于 2013-10-31T21:39:24.947 回答
0

问题是main是静态的,即整个类只有一个,而Ystart不是静态的,是针对每个对象创建的。然后,当您尝试从 main 访问 Ystart 时,问题是 -Ystart 是什么实例?由于没有好的答案,它会产生编译错误。

如果你想在 main 中使用它,你可以将 Ystart 标记为 static。

于 2013-10-31T21:34:25.860 回答
0

这意味着您不能在没有实例的情况下引用实例字段。在您的情况下,最简单的解决方案是

  • 创建要使用的实例
  • 使字段静态。我不喜欢这个选项。

尝试

Turtle t1 = new Turtle(w,50,race.Ystart);
Turtle t2 = new Turtle(w,400,race.Ystart);

但是,我会制作您的随机数生成器static,因为每个实例都有一个没有什么价值。

于 2013-10-31T21:35:20.147 回答