整数不更新,虽然方法应该强制它

问题描述:

所以,我创建了一个基于文本的Java游戏,货币是豆形软糖。不过,我有一个问题。每当我设置货币加5,它没有,并返回0。下面的代码整数不更新,虽然方法应该强制它

public class Util{ 

    public int Jellybeans = 0; 

    public void jellybeans(int Amount){ 
     Jellybeans = Jellybeans + Amount; 
    } 

    public int getJellybeans(){ 
     return Jellybeans; 
    } 
} 


public class Tutorial{ 

    Util util = new Util(); 
    private int jellybeanCount = util.getJellybeans(); 

    private void dialog(){ 
     //unrelated irrelevant stuff 
     util.jellybeans(5); 
     Util.printAnimatedText("You now have " + jellybeanCount + " 
     jellybeans!")' 
    } 
} 

任何帮助将不胜感激,这可能是一个基本的问题,但我不知道

+1

是的,这是一个基本问题。 'jellybeancount'是你做任务时返回的任何'getJellybeans'的副本。 getJellybeans变化时它不会改变。就好像,我有一张纸上写着5张纸,并告诉你拿出自己的一张纸并复制我的纸。如果我在纸上划掉5,然后将它改为6,那么你的纸张会改变吗? – ajb

你在错误的地方调用getJellybeans()。你需要做的是:

Util util = new Util(); 
private int jellybeanCount; 
private void dialog(){ 
    util.jellybeans(5); 
    jellybeanCount = util.getJellybeans(); // here 
    Util.printAnimatedText("You now have " + jellybeanCount + " 
      jellybeans!")' 
} 

这是为什么?

因为当你在一开始创建Util对象时,Jellybeans场又是(或等于特别ZERO )。所以当你调用getJellybeans()时,该字段仍然没有5,并返回其初始值ZERO

但是,将字段的值设置为5 util.jellybeans(5);后,您将拥有一个其值不为零的字段。你现在可以得到。

+0

我认为它有效,对,但是...为什么要创建一个新的变量,如果你已经在课堂上有了它? –

+0

@DamianLattenero它不创建一个新变量,它将一个值赋给上面的字段('private int jellybeanCount;')。 – Yahya

+0

是的!对不起,我在谈论那个领域:)。为什么需要? –

编辑

如果你真的想有一个jellybean柜台,并将其封装,你应该做一些额外的事情:

public class Util{ 

    private int Jellybeans = 0; //make this variable private, so you only expose it and edit it via getters and setters 

    public void jellybeans(int Amount){ 
     Jellybeans = Jellybeans + Amount; 
    } 

    public int getJellybeans(){ 
     return Jellybeans; 
    } 
} 


Util util = new Util(); 
//private int jellybeanCount = util.getJellybeans(); // this is not needed 
private void dialog(){ 
    //unrelated irrelevant stuff 
    util.jellybeans(5); 
    Util.printAnimatedText("You now have " + util.getJellybeans() + " 
    jellybeans!")' // here you use the getter, so you have full control of the state of util class 
} 

这种方式,您封装的行为你的对象在Util类中,这就是你有一个类,首先有一个实例变量。

+1

@ maytham-ɯɐɥʇʎɐɯ感谢您的编辑! –

调用豆形软糖(5)后,您不会调用getJellybeans()方法。

private int jellybeanCount = util.getJellybeans(); 
    private void dialog(){ 
     //unrelated irrelevant stuff 
     util.jellybeans(5); 
     jellybeanCount = util.getJellybeans(); 
     Util.printAnimatedText("You now have " + jellybeanCount + 
     jellybeans!")' 

    } 
+0

同样,这是真的,但是,为什么需要新的变量/字段jellybeanCount?在Util类中,alerady存在该字段 –

+0

@DamianLattenero因为它使代码流更顺利一点?在这个例子中,它可能没有太大的区别,但是有很多时候它使代码更易于使用中间变量,这样你就不会有一堆更复杂的表达式都被粘在一个更大的语句中。 – ajb

+0

jellybeans方法是无效的,因此您需要另一个方法util.getJellybeans()来引用类变量,假设所有变量都是局部变量。你必须调用getJellybeans(),它在打印之前返回一个int值。 – Juniar

由于int是原始类型,而不是由基准设置

private int jellybeanCount= ... 

你可能想下面来修改这个方法返回一个值

public int jellybeans(int Amount){ 
    return Jellybeans + Amount; 
} 

并调用它,如下

jellybeanCount = util.jellybeans(5); 
    Util.printAnimatedText("You now have " + jellybeanCount + " 
    jellybeans!")'