返回值不变-java

返回值不变-java,java,Java,我的参数值在我传递、编辑并返回它之后似乎没有改变-它保持不变 我在哪里做错了,能帮我点忙吗?我正在创建一个简单的枪类程序。问题发生在我的重新加载方法中。当我将子弹重新装入枪中时,枪中的bulletsRemaining将成为最大容量,但弹药值不会降低 public class Gun { String name; String sound; int minDamage; int maxDamage; int shotsPerSecond; int

我的参数值在我传递、编辑并返回它之后似乎没有改变-它保持不变

我在哪里做错了,能帮我点忙吗?我正在创建一个简单的枪类程序。问题发生在我的重新加载方法中。当我将子弹重新装入枪中时,枪中的
bulletsRemaining
将成为最大容量,但弹药值不会降低

public class Gun {

    String name;
    String sound;
    int minDamage;
    int maxDamage;
    int shotsPerSecond;
    int capacity;
    int bulletsRemaining;

    public Gun(String name, String sound, int minDamage, int maxDamage, int shotsPerSecond, int capacity, int bulletsRemaining) {
        this.name = name;
        this.sound = sound;
        this.minDamage = minDamage;
        this.maxDamage = maxDamage;
        this.shotsPerSecond = shotsPerSecond;
        this.capacity = capacity;
        this.bulletsRemaining = bulletsRemaining;
    }

    public void fire() {
        Random rnd = new Random();

        int totalDamage = 0;
        for(int x = 0; x<shotsPerSecond; x++)
        {
            int damage = rnd.nextInt(maxDamage) + 1;
            System.out.print(sound + "(" + damage + ")");
            totalDamage += damage;
        }

        System.out.println(" --> " + totalDamage + " Dmg/Sec ");
    }

    public void fireAtWill() {
        Random rnd = new Random();

        int totalDamage = 0;
        while(bulletsRemaining > 0) {
        for(int x = 0; x<shotsPerSecond; x++)
            {   
                int damage = rnd.nextInt(maxDamage) + 1;
                System.out.print(sound + "(" + damage + ")");
                totalDamage += damage;
                bulletsRemaining--;
                if(bulletsRemaining == 0)
                    break;
            }   

        System.out.println(" --> " + totalDamage + " Dmg/Sec ");
        totalDamage = 0;
        }
    }

    public int reload(int ammo) {
        //System.out.println();
        //System.out.println("Bullets remaining: " + bulletsRemaining);
        //System.out.println("Ammo remaining: " + ammo);
        //System.out.println("Reloading " + name);

        int bulletsReload = capacity - bulletsRemaining; //Amount of bullets to be loaded to gun
        ammo = ammo -= bulletsReload;
        bulletsRemaining = bulletsRemaining += bulletsReload; //Fill bulletsRemaining to the max again after reloading
        return ammo;
    }

    public void supressiveFire(int ammo) {

        Random rnd = new Random();

        int totalDamage = 0;
        while(ammo != 0) {
        while(bulletsRemaining > 0) {
        for(int x = 0; x<shotsPerSecond; x++)
            {   
                int damage = rnd.nextInt(maxDamage) + 1;
                System.out.print(sound + "(" + damage + ")");
                totalDamage += damage;
                bulletsRemaining--;                
            }   

            System.out.println(" --> " + totalDamage + " Dmg/Sec ");
            totalDamage = 0;
            if(bulletsRemaining == 0)
                    reload(ammo);
        }
      }
        if(ammo == 0)
            System.out.println("Out of ammunition)");

    }

    public static void main(String[] args) {
        // TODO code application logic here

        int ammo = 5;
        Gun g1 = new Gun("MK16", "Bang!", 10,15,5,5,5);

        g1.fire();
        g1.reload(ammo);
        System.out.println("Ammo left: " + ammo);
        System.out.println("Bullets left: " + g1.bulletsRemaining);


    }

}
我收到的输出:

Ammo: 0
Bullets Remaining: 5
Ammo: 5
Bullets Remaining: 5

你应该像下面那样重新分配它

ammo = g1.reload(ammo);
大体上

    public static void main(String[] args) {
        // TODO code application logic here

        int ammo = 5;
        Gun g1 = new Gun("MK16", "Bang!", 10,15,5,5,5);

        g1.fire();
        ammo = g1.reload(ammo);
        System.out.println("Ammo left: " + ammo);
        System.out.println("Bullets left: " + g1.bulletsRemaining);


    }

我应该在哪里做这件事?@Aloysius在主方法中。输出仍然是一样的,弹药没有改变@Beniton@Aloysius要重新装填弹药,你只需将弹药的容量设置到合适的位置?@Aloysius我想你会感到困惑,因为你认为
弹药是通过引用传递的。Java基本类型总是通过值传递,因此它们只被复制。这就是为什么你必须用返回值重新分配它。你能告诉我们你用它做了什么操作吗?是的。所以我要做的是创建一把枪,这样当我在剩下0发子弹后调用重新加载方法时,它会自动重新加载到最大容量,同时降低指定的弹药值。旁注:
ammo=ammo-=bulletsReload
是多余的。只要
弹药-=bulletsReload
就足够了;它将
ammo
设置为新值。类似地,
bulletsRemaining=bulletsRemaining+=bulletsReload