[英]How do I properly call a method inside a method inside the same class?
我正在編寫一些代碼,以處理使用蒙特卡洛算法顯示的隨機步行者。
現在,我指定了一個沃克類,其中包含兩個重要方法,一個用於控制運動的步進函數和一個用於控制速度和方向的步進大小函數。
但是由於某種原因,我無法在step方法中正確調用stepsize方法。 結果,程序在屏幕上什么也沒畫。 該代碼執行,我沒有錯誤。
我的代碼:
import java.util.*;
class Walker {
float y;
float x;
float monte_carlo;
Walker() {
x = width/2;
y= height/2;
}
void display(){
stroke(0);
point(x,y);
}
float stepsize (float r1) {
while (true) {
r1 = random(0,10);
float probability = r1;
float r2 = random(0,10);
if (r2 < probability) {
return r1;
}
}
}
void step() {
x += stepsize(monte_carlo);
y += stepsize(monte_carlo);
}
}
Walker w;
void setup() {
size(400,400);
w = new Walker();
background(255);
}
void draw() {
w.display();
w.step();
}
這個問題困擾了我一段時間,如果有人能啟發我,我將不勝感激!
Java是按值傳遞的 ,因此您的monte_carlo
stepsize()
方法將不會修改您的monte_carlo
變量。 只需直接在方法中使用變量,而不是將其傳入即可。
float stepsize () {
while (true) {
monte_carlo = random(0,10);
float probability = monte_carlo;
float r2 = random(0,10);
if (r2 < probability) {
return monte_carlo;
}
}
}
每當調用stepsize(monte_carlo)
時,您總是在調用stepsize(monte_carlo)
stepsize(0.0f)
,因為float monte_carlo;
表示該變量已使用其默認值( 0.0f
)進行了初始化,並且您絕不會在代碼中對其進行修改。
另外,由於您從不使用傳遞給stepsize()
函數的值,因此應改用以下簽名: float stepsize()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.