2013-02-18 63 views
-2

我想在兩個不同的函數中初始化一個變量兩次,而第二次初始化對第一次初始化沒有影響。如何初始化變量兩次?

float X; 

void setup() 
{ 
    size(400, 400); 
    background(255); 
} 
void draw() 
{ 
    Rect1(); 
    Rect2(); 
} 

void Rect1() 
{ 
    fill(255,0, 0); 
    rect(X, 20, 40, 40); 
    X=20; 
} 

void Rect2() 
{ 
    fill(0, 255, 0); 
    rect(X, 200, 40, 40); 
    X=50; 
} 
+1

請更詳細地解釋你想達到什麼,因爲現在最簡單的答案是「使用2個變量」或「在函數內部聲明」,但這將分別使交互變得不可能和使它們在其功能之外不可見。 – fvu 2013-02-18 00:24:02

+3

這看起來像[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Alnitak 2013-02-18 00:38:53

+0

它不清楚你想在這裏實現什麼。您已將「X」聲明爲全局變量。但是你可能想要把它作爲一個在Rect1()和Rect2()的頂部聲明的局部變量,或者你可能想要將一個引用或指針傳遞給每個函數,然後調用者(draw())可以使用不同的變量來調用Rect1()和Rect2()。 – Ant 2013-02-18 00:27:54

回答

1

您的代碼似乎是「示範」的代碼,但它並沒有真正做任何事情比顯著說明你可能需要先坐下來學習一些關於處理,然後再繼續等 - 撞了上去處理.org並運行一些教程。這很值得。

你給出的代碼可以寫得更明智,但我會回答這個問題;處理使用Java的作用域規則的變化:一個局部變量勝過一個對象實例變量,它勝過一個全局變量:

int x = 0; 
int y = 50; 

class Thing { 
    int y = 10;  
    Thing() { 
    // x is global, y is global and object instance 
    println("x (in Thing): "+x); 
    println("y (in Thing): "+y); 
    declareAndCheck(); 
    } 
    void declareAndCheck() { 
    // now we make some local variables: they win. 
    int x = 40; 
    int y = 100; 
    println("x (local declared): "+x); 
    println("y (local declared): "+y); 
    } 
} 

void setup() { 
    println("x (global): "+x); 
    println("y (global): "+y); 
    Thing t = new Thing(); 
    // and global is still global 
    println("x (global, again): "+x); 
    println("y (global, again): "+y); 
} 

,這將產生以下輸出:

x (global): 0 
y (global): 50 
x (in Thing): 0 
y (in Thing): 10 
x (local declared): 40 
y (local declared): 100 
x (global, again): 0 
y (global, again): 50 

爲什麼?首先我們看到:

x (global): 0 
y (global): 50 

因爲x和y是值爲0和50的全局變量。足夠簡單。然後我們看到:

x (in Thing): 0 
y (in Thing): 10 

因爲在「事」的對象,我們有一個對象實例變量「Y」,這贏得它的命名衝突,以及全局變量。

然後我們進入declareAndCheck,我們看到:

x (local declared): 40 
y (local declared): 100 

因爲我們現在有一個全球性的X,和本地x和地方總是贏,我們有一個實例y和當地的Y,並且本地總是贏。

最後,我們再次打印在全球範圍內的X和Y,而且由於沒有衝突,我們可以看到:

x (global, again): 0 
y (global, again): 50 

如果這沒有意義的你,通過這些教程運行,他們教你編程在處理=)