java - 为什么我的变量没有在这些 for 语句中相加?

标签 java

我正在研究一些初级 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(...) { } declarationi < 3在每次迭代的开始时检查测试,但是 i++部分在每次迭代的结束时调用。

关于java - 为什么我的变量没有在这些 for 语句中相加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308793/

相关文章:

java - Eclipse中哪里有好的Xj3D教程?

java - Hibernate IN关键字在where子句之前有什么用

java - 如何将应用程序更新标记为立即或灵活(应用程序内更新 API)

java - 使用子类的类型或其父类(super class)的类型创建子类对象

java - 仅存储不同字符串的有效方法/结构

java - JSOUP - 直接从页面中以特定格式提取数据

java - 从不同的 ActionListener 对同一对象/列表执行操作

java - 创建由子类初始化的最终字段

Java Web Service(SOAP) 消息格式通用(名称/值属性)节点与特定节点

java - 如何并排放置两个jpanel