簡體   English   中英

我不知道賦值運算符如何工作[處理]

[英]I don't know how the assignment operator works [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是原始類型,因此結果應符合您的期望。 但是,如果它們是參考,那么您寫的內容將是不完整的。 在這種情況下,構造函數將幫助您保留變量的舊值。

在輸入繪制方法時,您是否嘗試過檢查bar的值並查看賦值前后的實際值?

draw()循環每秒運行多次。 再次運行時,foo被bar的值覆蓋,bar的值與上一次執行draw()的時間相同。 我認為,如果將println語句更改為:

println("foo: " + foo + " bar: " + bar);

然后,如果在移動鼠標的同時運行草圖,您將看到類似以下內容的條目:

foo: 76 bar: 84
foo: 84 bar: 91
foo: 91 bar: 97
foo: 97 bar: 97

不出所料,每次執行draw()時,foo都會采用bar在上一次執行draw()時具有的值(即mouseX),因為draw()循環會將foo設置為bar的當前值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM