2013-10-31 117 views
-1

Iam嘗試創建類並部分成功。但是當我嘗試在main method中創建東西時,幾乎所有的東西都會出現這些錯誤。如果我在其他方法中創建這些東西,然後從我的主要方法中調用它們,它就可以工作。無法對非靜態字段進行靜態引用

但這不是什麼Iam應該做的,所以我需要修復它,所以在主要方法的東西工作。第一個錯誤我得到的是,當我試圖在我的主要對象創建對象龜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){ 


    } 
+0

請記住用相關語言標記您的問題。 – Barmar

+2

將問題的標題粘貼到Google搜索字段中,按回車鍵,然後閱讀您將獲得的數百個結果中的一個。提示:如果沒有盒子,你無法得到盒子裏面的東西。 –

+0

@JBNizet,或者,在撰寫問題時,查看下面顯示的所有重複項,以避免提出重複問題。 –

回答

0

的問題是,主要是靜態的,即只有一個爲整個類,而Ystart不是靜態的,並且爲每個對象創建。 然後,當你試圖從main訪問Ystart時,問題是-Ystart是什麼實例?由於沒有好的答案,它會導致編譯錯誤。

如果你想在main中使用它,你可以將Ystart標記爲靜態。

+0

「然後,當你試圖從main訪問Ystart時,問題是-Ystart什麼情況?「 Shouldent我可以寫這個.Ystart呢? – user2779497

+0

@ user2779497是的。每個類的對象/實例都有自己的變量,稱爲Ystart。你必須參考其中之一。 – LeeNeverGup

0

這意味着你不能引用沒有實例的實例字段。在你的情況下,最簡單的解決方法是

  • 創建一個實例使用
  • 使現場靜。我不會喜歡這個選項。

嘗試

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

我會讓你的隨機數發生器static然而,因爲是每個實例一個價值不大。

0

靜態方法或字段作爲類的一部分存在,並且與該類的實例無關。非靜態方法或字段取決於此類實例的存在。因此,您可以在對象上調用非靜態方法,例如您可以調用課程中的靜態方法,例如:race.draw()Racetrack.main(new String[]{"one", "two", "three"});

相關問題