我正在研究一些開始Java邏輯,我不知道爲什麼這不起作用。這裏是我做了一個方法:爲什麼我的變量沒有在這些語句中加在一起呢?
private void printSubclassBoxes(){
int coordinateX = ((getWidth() - BOX_WIDTH) /4);
for (int i = 0; i < 3; i++){
double coordinateY = (getHeight()/2);
GRect classBox = new GRect (coordinateX, coordinateY, BOX_WIDTH, BOX_HEIGHT);
GLabel classLabel = new GLabel ("Program");
double labelCoordinateX = (coordinateX + ((classBox.getWidth()/2) - (classLabel.getWidth()/2)));
double labelCoordinateY = (coordinateY + ((classBox.getHeight()/2) + (classLabel.getAscent()/2)));
add(classBox);
add(classLabel, labelCoordinateX, labelCoordinateY);
if (i == 1){
coordinateX = (((getWidth() - BOX_WIDTH) /4) * 2);
}
if (i == 2){
coordinateX = (((getWidth() - BOX_WIDTH) /4) * 3);
}
}
}
現在,我敢肯定,有可能是更好的方式來做到這一點,但請 - 我現在沒有在正確的興趣(我想學習而不會spoonfed答案)。我想知道的是爲什麼結尾兩個if語句不像我認爲他們應該那樣工作。
爲了簡單起見,假設
100 = ((getWidth() - BOX_WIDTH)
int coordinateX = 25;
我的理解是,int i
獲取對第一個if語句和25 + 25這樣的話coordinateX = 50
那麼下一次增加的循環, i = 2 so coordinateX would = 75.
這就是我期待的事情,但事實並非如此。我似乎正在將前兩個盒子直接打印在一起,然後第三個是移動25.
感謝您的幫助球員。現在我明白了這個循環,我繼續前進並以不同的方式解決它。我結束了分配coordinateX另一個變量並用它來添加到末尾:
int coordinateX = ((getWidth() - BOX_WIDTH) /4);
int otherCoordinateX = coordinateX;
for (int i = 0; i < 3; i++){
double coordinateY = (getHeight()/2);
GRect classBox = new GRect (coordinateX, coordinateY, BOX_WIDTH, BOX_HEIGHT);
GLabel classLabel = new GLabel ("Program");
double labelCoordinateX = (coordinateX + ((classBox.getWidth()/2) - (classLabel.getWidth()/2)));
double labelCoordinateY = (coordinateY + ((classBox.getHeight()/2) + (classLabel.getAscent()/2)));
add(classBox);
add(classLabel, labelCoordinateX, labelCoordinateY);
coordinateX = otherCoordinateX + coordinateX;
}
如果您重構代碼,它可能是更容易看清問題。你有if語句基於循環的迭代硬編碼。將這些更改爲更簡單的形式可能有助於您排除故障。 – glasnt 2010-02-22 04:37:41