我正在研究一些初级 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);
}
}
}
现在我确信可能有更好的方法来做到这一点,但是拜托,我现在对此不感兴趣(我正在努力学习而不是被灌输答案)。我只想知道为什么最后的两个 if 语句没有像我想象的那样工作。
为了简单起见,我们说
100 = ((getWidth() - BOX_WIDTH)
int coordinateX = 25;
我的理解是,int i
到达第一个 if 语句并添加 25 + 25,因此cocolumnX = 50。
然后在下一次循环中,i = 2,所以cocotoxX = 75。
这是我期望发生的事情,但事实并非如此。我似乎将前两个框直接打印在彼此的顶部,然后第三个移动 25。
谢谢你们的帮助。既然我弄清楚了这个循环,我就继续以不同的方式解决它。我最终将坐标 X 分配给另一个变量并使用它添加到末尾:
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;
}
最佳答案
在循环的第一次迭代处:
-
i = 0
,和 -
coordinateX = 25
,正如预期的那样。
迭代结束时coordinateX
未更新(自 i == 0
起)。
然后,在第二次迭代中:
-
i = 1
, - 但仍然
coordinateX = 25
因为它没有更新。
第二次迭代结束时coordinateX
已更新,因为 if i == 1)
测试。
在第三次迭代中
-
i = 2
- 新值
coordinateX
使用,它是在第二次迭代结束时设置的。
解决方案
如果不以任何必要的方式更改您的代码,只需替换 if (i == 1)
通过if (i == 0)
,和if (i == 2)
通过if (i == 1)
.
编辑:类(class)
在 for(...) { } declaration
,i < 3
在每次迭代的开始时检查测试,但是 i++
部分在每次迭代的结束时调用。
关于java - 为什么我的变量没有在这些 for 语句中相加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308793/