首页 > 解决方案 > 更改 int 变量没有效果

问题描述

我正在研究 NaturalSelectionSimulator,并且在更改生物的X int 值时遇到问题。

for(Food f : food)
{
    if(f.x()-x==-1)
    {
        x--;
    }
    else if(f.x()-x==1)
    {
        x+=1;
        System.out.println("RIGHT MOVE F ");
    }
    else if(f.y()-y==-1)
    {
        y--;
    }
    else if(f.y()-y==1)
    {
        y++;
    }
}

fx() 返回食品类的X int val,反之亦然 fy()。print 语句确实运行,但它上面的语句没有运行。将其改回 x++;不影响结果。

GitHub 链接:https ://github.com/JakeDavisCodes/NaturalSelectionSimulator

标签: javabluej

解决方案


你的问题有点模棱两可。也许我误解了它,在这种情况下,这个答案是不相关的;在这种情况下,请编辑问题或等待确实遵循您在此处询问的人。

听起来您对变量传递在 java 中的工作方式感到困惑。当你有方法public int getX() { return this.x; }只返回确切的值时。在调用它时,将检索 x 字段的当前值并将其返回。它实际上是一个副本。如果您随后将该值分配给您自己的变量(即使您也将其称为“x”——这无关紧要,纯属巧合,两段代码选择了相同的名称),您就有了一份副本。如果你再弄乱它,你只是弄乱了你的副本。

在 java 中没有办法改变这种行为。要么直接更新变量,例如通过写:void setX(int newX) {this.x = newX; }和做:f.setX(f.getX() + 1),要么使用可变容器,如AtomicInteger.


推荐阅读