我有三节课。超类probability
,子类Eating
和转轮类Person
。
目标是在for循环中满足条件时“触发”某些方法。进食(方法dox)会增加可变重量。一旦体重大于120,那么被调用的dox的概率(int px
)会减少,并且运动的概率(py
)会增加,直到体重下降到阈值以下。
然而我的int px
永远不会减少。为什么是这样?下面是我的降低概率方法和调用它们的触发器。
public void Trigger()
{
if (weight >= 120)
{
dProb(px);
dProb(pz);
iProb(py);
}
if (weight <= 80)
{
dProb(py);
iProb(px);
iProb(pz);
}
public void dProb(int p)
{
p -= 5;
}
public void iProb (int p)
{
p += 5;
}
答案 0 :(得分:3)
p
是方法dProb
的本地变量,它与p
中的iProb
不同。这意味着px
,pz
和py
不受影响(Java始终按值传递 )。
当您输入方法时,会创建一个临时变量,并在退出时立即销毁。
你应该让p
成为类成员(阅读更多here),或让方法返回结果,并将其分配给调用者,或者直接修改{ {1}},px
和py
。