-2

我试图在 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;
}
4

1 回答 1

1

您的代码似乎是“演示”代码,但它实际上并没有做任何重要的事情,除了表明您可能需要先坐下来了解一下处理,然后再继续 - 点击 processing.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

因为在“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 =)

于 2013-02-18T03:44:02.123 回答