Classe Arma

Olá, pessoal do GUJ!

Estou montando a minha classe chamada arma:

[code]public class Arma {
private int[] municao;

// a = Munição total
// b = Balas por vez
public Arma(int a, int b)
{
    municao = new int[3];
    municao[1] = a - b;
    municao[2] = b;

    // A quantidade de balas carregadas é igual ao total - Balas por vez
    municao[0] = municao[1] - (municao[1] - municao[2]);

    System.out.println("Munição: " + municao[0] +
            "\nMunição total: " + municao[1] +
            "\nMunição por vez na arma: " + municao[2]);
}

// Checa o quanto há de balas restantes na arma, ex: (x-93), onde x é o número de balas restantes na arma.
public int getBalas() {
    return municao[0];
}
public void setBalas(int a) {
    this.municao[0] = a;
}

// Checa se a arma está vazia, ou seja se (x-y) são == 0
public boolean vazia()
{
    if(municao[0] == 0 && municao[1] == 0)
    {
        return true;
    } else return false;
}

public boolean precisaCarregar()
{
    if(municao[0] <= 0 && municao[1] != 0)
    {
        return true;
    } else return false;
}

public void carregar()
{
    setBalas(municao[2]);
    municao[1] -= municao[2];

    System.out.println("Munição: " + municao[0] +
            "\nMunição total: " + municao[1] +
            "\nMunição por vez na arma: " + municao[2]);
}

public void atirar()
{
    if(vazia())
    {
        System.out.println("Arma está vazia e você não posuui mais balas.");
    }
    else if(getBalas() <= 0)
    {
        carregar();
    }
    else {
        setBalas(getBalas()-1);
        System.out.print("Tiro! Balas restantes: "  + getBalas() + "\n");
    }
}

}[/code]

E estou invocando a mesma da seguinte maneira no método principal:

public static void main(String[] args) { Arma a = new Arma(100, 7); while(true) { if(!a.vazia()) a.atirar(); } }

O problema é que quando a arma fica com pouca munição, ela começa a ir para os número negativos, e não existe munição negativa. O que posso fazer: Segue a saída:

[quote]Munição: 7
Munição total: 93
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 86
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 79
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 72
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 65
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 58
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 51
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 44
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 37
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 30
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 23
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 16
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 9
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: 2
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0
Munição: 7
Munição total: -5
Munição por vez na arma: 7
Tiro! Balas restantes: 6
Tiro! Balas restantes: 5
Tiro! Balas restantes: 4
Tiro! Balas restantes: 3
Tiro! Balas restantes: 2
Tiro! Balas restantes: 1
Tiro! Balas restantes: 0[/quote]

Não é necessário mostrar o restante da saída, pois segue cada vez mais até o infinito…
Então, qual o problema no meu código? como evito que ele continue a atirar se as balas já estão negativas?
Sem contar, que quando chegar no final e houver, ex: 2 balas, ele vai querer adicionar 7 balas, porém só tem 2, e 2 não são nada, ou seja, seria legal eu poder carregar a arma com essas 2.

public static void main(String[] args) { Arma a = new Arma(100, 7); while(!a.vazia()) { a.atirar(); } }

Tenta assim

Obrigado pela resposta, mas mesmo assim ainda não funciona. Mais alguma ajuda? Fiz a seguinte alteração:

public boolean vazia() { if(municao[0] <= 0 && municao[1] <= 0) { return true; } else return false; }

Saída:

Munição: 7 Munição total: 93 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 86 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 79 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 72 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 65 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 58 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 51 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 44 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 37 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 30 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 23 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 16 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 9 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: 2 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0 Munição: 7 Munição total: -5 Munição por vez na arma: 7 Tiro! Balas restantes: 6 Tiro! Balas restantes: 5 Tiro! Balas restantes: 4 Tiro! Balas restantes: 3 Tiro! Balas restantes: 2 Tiro! Balas restantes: 1 Tiro! Balas restantes: 0

Mesmo assim, ainda é possível atirar com a arma com balas negativas.

Creio que

municao[0] = municao[1] - (municao[1] - municao[2]);

Seja igual a:

municao[0] = municao[2];

:smiley:

Orbigado pela dica! Consegui solucionar o problema sozinho.