java - 不知道赋值运算符是怎么工作的[处理中]

标签 java processing

我正在写一个模拟蛇的程序,蛇的每一节的值都存储在一个数组中。为了模拟蛇物理,我需要将后续部分分配给上一节,这是我遇到问题的地方。

int bar;
int foo;

void setup() {}

void draw() {
  foo = bar;
  bar = mouseX;
  println(foo);
  println(bar);
}

在这个例子中,foo 不应该输出 bar 之前的鼠标位置吗?在 foo 被分配给 bar 之后,Bar 被分配给 mouseX。赋值运算符是否使得被赋值的变量发生变化,被赋值的变量也会随之变化?这非常令人沮丧,我认为解决方案应该很简单。如何将一个变量分配给另一个变量而不考虑将来对所引用的 var 的更改?

编辑:这是蛇模拟器的一个例子,它应该可以工作,但出于同样的原因,所有的段最终在每个 for 循环结束时都是相同的:

int segments = int(random(3, 10));
float springing[] = new float[segments];
float damping[] = new float[segments];
PVector accel[] = new PVector[segments];
PVector[] joints = new PVector[segments];
PVector[] delta = new PVector[segments];
PVector food = new PVector(0,0,0);

void setup() {
  size(500, 500);
  stroke(255);
  for(int n = 0; n < joints.length; n++) {
    if (n == 0) joints[0] = new PVector(random(width), random(height));
    else joints[n] = joints[0];
    delta[n] = new PVector(0,0,0);
    accel[n] = new PVector(0,0,0);
    springing[n] = .05*(.07*(n+1)); 
    damping[n] = .95-(.02*n);
  }
}

void draw() {
  background(0);
  food.x =  mouseX;
  food.y = mouseY;
  for(int n = 0; n < segments; n++) {
    if (n == 0) {
     delta[0] = PVector.sub(food, joints[0]); 
     joints[0].add(delta[0]);
    }
    else {
     delta[n] = PVector.sub(joints[n-1], joints[n]);
     delta[n].mult(springing[n]);
     accel[n].add(delta[n]);
     joints[n].add(accel[n]);
    }
    point(joints[n].x, joints[n].y);
    accel[n].mult(damping[n]);
  }
}

最佳答案

在您的示例中,foobar 是基本类型,因此结果应该符合您的预期。但是,如果它们是引用文献,那么您所写的内容将是不完整的。在这种情况下,构造函数将帮助您保留变量的旧值。

您是否尝试过在进入 draw 方法时检查 bar 的值并查看赋值前后的实际值?

关于java - 不知道赋值运算符是怎么工作的[处理中],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704291/

相关文章:

java - 具有合成时间戳的 Spark 窗口函数?

java - 使用java中的选择排序按字符串对用户定义的数组进行排序

java - 在处理中获取一条线沿圆的切线移动

java - 将一些处理代码移植到 Eclipse,出现大量错误

java - ArrayIndexOutOfBounds 8 处理异常

java - 如何使用ObjectOutputStream和ObjectInputStream

Java NUX 库,XPATH 性能

java - 在处理层映射 GPS 点

java - 如何在 Java 中导入 JAR 和包

audio - 处理中的OutOfBoundsException(声音库)