如何初始化变量两次?

时间:2013-02-18 00:19:28

标签: variables initialization processing

我正在尝试在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 个答案:

答案 0 :(得分:1)

您的代码似乎是“演示”代码,但除了显示您可能需要首先坐下来学习一些关于处理之前的事情之前它并没有真正做任何重要的事情 - 点击processing.org并运行通过一些教程。这是值得的。

你提供的代码可以写得更明智,但我会回答这个问题; Processing使用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

因为在“Thing”对象中,我们有一个对象实例变量'y',它赢得了它与全局变量之间的命名冲突。

然后我们进入declareAndCheck,在那里我们看到:

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

因为我们现在有一个全局x,一个本地x,而本地总是获胜,我们有一个实例y和一个本地y,再次本地总是获胜。

最后我们再次在全局上下文中打印x和y,因为没有冲突,我们看到:

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

如果这对你没有意义,那么通过这些教程,他们会教你在Processing中编程=)