好了,所以我正在嘗試創建一個遞歸算法,從而生成一系列圈子。Java:創建圈子
目前可以看出,我已經創建了圓類,並試圖使用遞歸,但正如你可能會告訴我,對於所有這些我都是新手。
現在已經在正確的位置繪製了所有的橢圓,我在每個圓圈中都包含了一個Color對象。我的目標是使它能夠隨着圓圈的生成而改變顏色,每一組圓圈都有一定的綠色(如上例所示)。
然而,目前,綠色的陰影應用於不正確的圓圈。如下所示:
如果有人能夠冒險猜測爲什麼會發生這種情況,我將非常感激。謝謝。
好了,所以我正在嘗試創建一個遞歸算法,從而生成一系列圈子。Java:創建圈子
目前可以看出,我已經創建了圓類,並試圖使用遞歸,但正如你可能會告訴我,對於所有這些我都是新手。
現在已經在正確的位置繪製了所有的橢圓,我在每個圓圈中都包含了一個Color對象。我的目標是使它能夠隨着圓圈的生成而改變顏色,每一組圓圈都有一定的綠色(如上例所示)。
然而,目前,綠色的陰影應用於不正確的圓圈。如下所示:
如果有人能夠冒險猜測爲什麼會發生這種情況,我將非常感激。謝謝。
到createCircles()
每次調用應該繪製在中心一個大圈,並調用自身遞歸3次,3米較小的圓。 y
座標始終保持不變,您可以通過添加和減去原始圓的半徑來重新計算座標。
public void createCircles(int x, int y, int rad) {
Circle myCircle = new Circle(x, y, rad);
circles.add(myCircle);
createCircles(x - (2*rad), y, rad/3);
createCircles(x, y, rad/3);
createCircles(x + (2*rad), y, rad/3);
}
對於您可以設置的rad
大小終止條件的溢出錯誤,像
if (rad < 5) {
return;
}
退出條款:如果圓半徑變得太小,不值得畫。
我現在已經更新了我的代碼,從數組繪製圓,但也遇到了新的問題:見上面 – user3352349
新的問題,一般應張貼新問題,以避免過去的答案無效。 – keshlam
道歉,將發佈爲新答案。 – user3352349
我明白,目前我得到一個溢出錯誤,因爲 我沒有退出子句的遞歸。
遞歸算法確實需要終止條件。
在您的情況下,您不希望在圓圈足夠小時繼續遞歸。所以基本上你只需換三個遞歸調用你在這裏:
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
弄成這個樣子(未經測試,但它應該讓你開始):
if (myRad > 0) {
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
}
因爲它沒有任何意義,以保持繪製半徑爲零的圓。
下面是關於終止條件維基百科條目:
我現在更新了我的代碼,從數組中繪製圓,但遇到了一個新問題:請參閱上面的 – user3352349
你需要一個基本情況。這就像遞歸的退出方法。在你的情況下,createCircles方法無限重複,這就是爲什麼它會產生溢出異常。嘗試這個。
public void createCircles(int x, int y, int rad){
int myX = x/3;
int myRad = rad/3;
if(rad != 0){
Circle myCircle = new Circle(myX, y, myRad);
circles.add(myCircle);
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
}
}
我已經更新了我的代碼,以從數組中繪製圓,但遇到了一個新問題:請參見上面 – user3352349
非常感謝。 – user3352349
我已經更新了我的代碼,以便從數組中繪製圓,但遇到了一個新問題:請參見上文。 – user3352349
這是因爲你總是計算圓的中心點,但'paint'方法需要在邊界框的左上角。繪畫時只需從'x'和'y'中減去'rad'。 – Warlord