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.