Problema na hora da execução

4 respostas
DoomGuy
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.

4 Respostas

R

coloca o código da classe “imprimetabela”

DoomGuy
package Principal;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.List;


//

public class ImprimeTabela {

	public void imprime(List<armas> arrayOfGuns) throws FileNotFoundException {
		PrintStream ps = new PrintStream("C:\\Users\\VSramos\\Desktop\\ø\\Guns.txt");
		for(int i = 0; i < arrayOfGuns.size(); i++){
		ps.println(arrayOfGuns.get(i));
		}
	}

}
Ivan_Alves

Lembre se que quando o cara criar uma nova arma você deve chamar uma nova instancia para a referencia 'c' já que é ela que é adicionada a List porque ela apenas representa uma referencia ao objeto uma mudança rápida ficaria onde está

public void NovaArma() {  
        this.adiciona(c.leitor());  
  
    }

irá ficar assim:

public void NovaArma() {  
        this.adiciona(new CriaArma().leitor());  //observe que eu crio uma nova instancia para classe CriaArma já que ela irá ser guardada na List 
  
    }

flw!!!

DoomGuy

Nossa, vdd. A cada vez q eu chamar o método “NovaArma”, uma nova arma deve ser criada, portanto, nova referencia ao cria arma… vddd.

vlw cara!!!

[]'s

Criado 26 de agosto de 2011
Ultima resposta 26 de ago. de 2011
Respostas 4
Participantes 3