无法减少int变量的值

时间:2015-08-07 20:49:06

标签: java variables int

我创建了4个类,一个MainP类,其他Ex2Ex3Ex4(3和4扩展为2)。当我从一个对象中调用一个减少另一个对象的int变量的对象时,它只在第一次调用时才会这样做。

这些是类:

练习2:

protected int par;

public int getPar() {
    return par;
}

public void setPar(int par) {
    this.par = par;
}

实例3:

private int par;

public Ex3(int par) {
    this.par = par;
}

public void bar(Ex2 b) {
    b.setPar(par - 10);
}

public int getPar() {
    return par;
}

public void setPar(int par) {
    this.par = par;
}   

Ex4与Ex3相同。

主要:

public class MainP {
    public static void main(String[] args) {

        Ex3 kaka = new Ex3(100);
        Ex4 tana = new Ex4(100);

        kaka.bar(tana);

        System.out.println(tana.getPar());

        kaka.bar(tana);

        System.out.println(tana.getPar());
    }
}

输出:

  

90
  90

我不明白为什么par在第一次通话中减少而在第二次通话时停止。我想它已经以某种方式进行了校准,但我不明白为什么。

编辑: 好吧,我理解我的愚蠢错误,但我有一个新的错误。 我改变了方法:

    public void bar(Ex2 b){
    b.setPar(b.par-=10);
}

现在我的输出是:

-10

-20

为什么方法会将b.par更改为-10?如果我这样做: tana.setPar(tana.par- = 10);在main方法中,将变量更改为public,它不会将tana的值更改为-10,并将其从100减少。

5 个答案:

答案 0 :(得分:3)

public void bar(Ex2 b){
    b.setPar(par - 10);
}

在此设置为b par - 10的值,其中par不是b的字段。因为它没有改变你2次,所以将b par字段设置为相同的值 - 90。

答案 1 :(得分:1)

  1. 您创建了Ex3类型的对象,其值par等于100
  2. 您创建了Ex4类型的对象,其值par等于100
  3. 致电bar()上的kaka,您将par的{​​{1}}值设置为tanakaka.par) - 10010现在是tana.par
  4. 第二次通过90致电bar(),您将kaka的{​​{1}}值设置为par(仍为tana }}) - kaka.par,所以100再次10
  5. 只需尝试使用笔和纸来追踪您的代码,问题就会很快显现出来。

答案 2 :(得分:0)

public void bar(Ex2 b){
    b.setPar(par-10);
}

如果没有前缀,par会引用this.par,而不是b.par,所以基本上,您是在说:

b.par = this.par - 10;

并且this.par在两次通话之间都没有变化,因此您自然会两次都看到90

你可能想要:

b.par = b.par - 10;

b.par -= 10;

答案 3 :(得分:0)

让我们分析一下代码: 你创造了卡卡和塔纳,他们都有par = 100。

然后你告诉卡卡设置塔纳的标准杆。 (kaka' s)par-10 = 100 - 10 = 90

然后你再次告诉卡卡设置塔纳的标准杆。 但卡卡的标准杆仍然是相同的。 所以你设置100 - 10 = 90。 你不会减少卡卡的标准杆

答案 4 :(得分:0)

你打电话给b.setPar(par-10);

'帕'是卡卡的一个例子。 b.setPar(par-10)正在更新' par'塔纳实例中的字段。你永远不会真正更新' par'在卡卡的实例中的字段。当您进行第二次通话时,您实际上只是执行两次相同的计算,给出相同的答案。