import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class ArrayOfGuns implements Runnable {
List<armas> ArrayOfGuns = new ArrayList<armas>();
Map<String, armas> locationOfGuns = new HashMap<String, armas>();
Scanner fA = new Scanner(System.in);
CriaArma c = new CriaArma();
ImprimeTabela t = new ImprimeTabela();
public void adiciona(armas g) {
ArrayOfGuns.add(g);
locationOfGuns.put(g.nome, g);
}
public void pega(int i) {
ArrayOfGuns.get(i).mostra();
}
public void totalDeArmas(int i) {
if (i == 1) {
System.out.println("Total de armas: " + ArrayOfGuns.size());
} else {
ArrayOfGuns.size();
}
}
public void ordena() {
Collections.sort(ArrayOfGuns);
}
public void mostraTudo() {
System.out.println("Armas Disponíveis: " + ArrayOfGuns);
}
public void localizaArma(String nome) {
locationOfGuns.get(nome).mostra();
}
public void NovaArma() {
this.adiciona(c.leitor());
}
public void imprime() throws FileNotFoundException {
t.imprime(this.ArrayOfGuns);
}
public void run() {
System.out
.println("O que deseja verificar? \n1-Adicionar Armas;\n2-Imprimir Arsena;");
int i = fA.nextInt();
if (i == 1) {
this.NovaArma();
}
if (i == 2) {
try {
this.imprime();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
System.out.print("Deseja algo mais?(1 = y/ 2 = n)");
int d = fA.nextInt();
if (d == 1) {
this.run();
}
if (d == 2) {
System.out.println("Obrigado!");
}
}
}
public class TesteArray {
public static void main(String[] args) throws IOException {
Scanner arm = new Scanner(System.in);
ArrayOfGuns s = new ArrayOfGuns();
s.run();
}
}
O código acima funciona da seguinte maneira: Ao iniciar o programa, é perguntado ao usuário o q ele deseja fazer... o Problema real ocorre quando é chamado pela 2ª vez o método run. Ao digitar uma nova arma, e ao imprimir, é imprimida 2 vezes a ultima aram inserida: de forma mais ou menos assim:
Execução do programa:
O que deseja verificar?
1-Adicionar Armas;
2-Imprimir Arsena;
1
Digite o nome da arma: Ak-47
Digite a nacionalidade da arma: Russa
Digite o calibre da arma: 7,62
Deseja algo mais?(1 = y/ 2 = n)1
O que deseja verificar?
1-Adicionar Armas;
2-Imprimir Arsena;
1
Digite o nome da arma: M16
Digite a nacionalidade da arma: Americana
Digite o calibre da arma: 5,56
Deseja algo mais?(1 = y/ 2 = n)1
O que deseja verificar?
1-Adicionar Armas;
2-Imprimir Arsena;
2
Deseja algo mais?(1 = y/ 2 = n)2
Obrigado!
Mas na impressão, aparece o seguinte:
Nome: M16 Nacionalidade: Americana Calibre: 5.56
Nome: M16 Nacionalidade: Americana Calibre: 5.56
O que estou fazendo de errado??
Obrigado.