Classe Arma

4 respostas
G

Olá, pessoal do GUJ!

Estou montando a minha classe chamada arma:
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");
        }
    }
}
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:

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

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.

4 Respostas

barney

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

Tenta assim

G

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.

M

Creio que

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

Seja igual a:

municao[0] = municao[2];

:smiley:

G

Orbigado pela dica! Consegui solucionar o problema sozinho.

Criado 8 de dezembro de 2010
Ultima resposta 8 de dez. de 2010
Respostas 4
Participantes 3