[RESOLVIDO] Inicializar um array a partir de de um arquivo de texto

7 respostas
F
public abstract class Deputado {
	private String nome;
	private int idade;
	private String sexo;
	private String partido;
	private int numero;
	private int votos;
	private String projeto;

	public Deputado(String nome, int idade, String sexo, String partido,
			int numero, String projeto) {
		super();
		this.nome = nome;
		this.idade = idade;
		this.sexo = sexo;
		this.partido = partido;
		this.numero = numero;
		this.projeto = projeto;
		votos = 0;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getIdade() {
		return idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getPartido() {
		return partido;
	}

	public void setPartido(String partido) {
		this.partido = partido;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public int getVotos() {
		return votos;
	}

	public void setVotos(int votos) {
		this.votos = votos;
	}

	public String getProjeto() {
		return projeto;
	}

	public void setProjeto(String projeto) {
		this.projeto = projeto;
	}

	public abstract void imprimeInfo();
}
public class Estadual extends Deputado {

	private String estado;

	public Estadual(String nome, int idade, String sexo, String partido,
			int numero, String projeto) {
		super(nome, idade, sexo, partido, numero, projeto);

	}

	public void imprimeInfo() {
		System.out.println("Nome: " + super.getNome());
		System.out.println("Número: " + super.getIdade());
		System.out.println("Idade: " + super.getIdade());
		System.out.println("Partido: " + super.getPartido());
		System.out.println("Sexo: " + super.getSexo());
		System.out.println("Projeto: " + super.getProjeto());
		System.out.println("Número de votos: " + super.getVotos());

	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

}
public class Federal extends Deputado {

	private int tempo;

	public Federal(String nome, int idade, String sexo, String partido,
			int numero, String projeto) {
		super(nome, idade, sexo, partido, numero, projeto);
		
	}

	public int getTempo() {
		return tempo;
	}

	public void setTempo(int tempo) {
		this.tempo = tempo;
	}


	public void imprimeInfo() {
		System.out.println("Nome: " + super.getNome());
		System.out.println("Número: " + super.getIdade());
		System.out.println("Idade: " + super.getIdade());
		System.out.println("Partido: " + super.getPartido());
		System.out.println("Sexo: " + super.getSexo());
		System.out.println("Projeto: " + super.getProjeto());
		System.out.println("Número de votos: " + super.getVotos());


	}

}
public class DeputadosException  {

	private String msg;
	
	public DeputadosException(String msg){
		this.msg = msg;
		}
	public String toString(){
		return "Mensagem: "+msg;
	}
}

A partir destas classes preciso uma classe chamada Candidatos, que possui um array de Deputado.
- No construtor desta classe, receba a quantidade de candidatos, e inicialize o array através da leitura do arquivo listaDeDeputados.txt. Inicialize todas as posições do array de Deputados de acordo com as informações do arquivo, criando deputados Federais ou Estaduais (cuidado com o tamanho do array. No arquivo existem 10 candidatos. Se o número de candidatos for 7, por exemplo, pegue somente os 7 primeiros candidatos do arquivo, ignorando os demais)
- Crie os métodos get e set para o atributo desta classe

O arquivo de texto é o seguinte:

Tipo: Estadual Estado: RS Nome: Gremista Idade: 23 Sexo: M Partido: PCO Número: 1221 Projeto: Se eleito, prometo dar um jeito para que o inter não ganhe o mundial! --- Tipo: Federal Tempo de Política: 15 Nome: Pafúncio Idade: 34 Sexo: M Partido: PCR Número: 1334 Projeto: Se eleito, prometo me eleger! --- Tipo: Estadual Estado: SP Nome: Antônio Nunes Idade: 36 Sexo: M Partido: PCP Número: 1111 Projeto: Se eleito, vou ganhar muita grana! --- Tipo: Federal Tempo de Política: 13 Nome: Anacreonte Idade: 21 Sexo: M Partido: PTC Número: 1221 Projeto: Se eleito, vou mudar meu nome! --- Tipo: Estadual Estado: AC Nome: José do Acre Idade: 87 Sexo: M Partido: PCA Número: 2453 Projeto: Se eleito, prometo fazer o Acre aparecer no mapa e virar um estado! --- Tipo: Federal Tempo de Política: 13 Nome: Paulão da Borracharia Idade: 22 Sexo: I Partido: PGLS Número: 2214 Projeto: Se eleito, vou pintar um arco-íris de energia! Pra deixar o mundo cheio de alegria! --- Tipo: Estadual Estado: RR Nome: Amnésio Idade: 22 Sexo: M Partido: ??? Número: 0000 Projeto: Esqueci... o.O! --- Tipo: Estadual Estado: RJ Nome: Pedrinho Idade: 12 Sexo: M Partido: PSS Número: 2332 Projeto: Sem projeto. Não vou me eleger mesmo... --- Tipo: Estadual Estado: PA Nome: Astrogilda Idade: 45 Sexo: F Partido: PMS Número: 6773 Projeto: Se eleita, vou criar uma lei que o homem deve pagar tudo para a mulher! --- Tipo: Federal Tempo de Política: 1 Nome: Mariestilde Idade: 89 Sexo: F Partido: PREDS Número: 1234 Projeto: Se eleita, vou ficar muito feliz!

Como posso fazer a classe Canditados, ler no construtor o arquivo txt e inicializar o array de deputados?

public class Candidatos {
private Deputado[] dep;

public Candidatos(String listaDeDeputados)
{
// ....

}
}

7 Respostas

daveiga

Opa, Boa Tarde!

Tente:

try {
        BufferedReader in = new BufferedReader(new FileReader("nome do arquivo"));
            String str;
            while (in.ready()) {
                str = in.readLine(); // faça isso pra cada linha em que estão os valores do atributos que você que quer
                // da pra instanciar o deputado no loop.
                process(str);
            }
            in.close();
    } catch (IOException e) {
    }

Dê uma olhada aqui.
http://javafree.uol.com.br/wiki/Ler%20Arquivos
http://www.guj.com.br/articles/13

d34d_d3v1l

Ou então vc cria uma classe que tenha como atributo um vetor […]

e serializa o objeto dessa classe!!

Procura no google, serialização de objetos com java
:smiley:
abraços

F

daveiga:
Opa, Boa Tarde!

Tente:

try {
        BufferedReader in = new BufferedReader(new FileReader("nome do arquivo"));
            String str;
            while (in.ready()) {
                str = in.readLine(); // faça isso pra cada linha em que estão os valores do atributos que você que quer
                // da pra instanciar o deputado no loop.
                process(str);
            }
            in.close();
    } catch (IOException e) {
    }

Dê uma olhada aqui.
http://javafree.uol.com.br/wiki/Ler%20Arquivos
http://www.guj.com.br/articles/13

Olhei seus links, e tentei o código.

Entendi a ideia, porém, como eu separo as strings do meu arquivo de texto?

Devo instanciar cada posição do array de deputados, usar o readLine() para percorrer todo o arquivo texto, dar um split em cada linha do arquivo texto e setar os parametros da classe Deputado?

Ps.: no eclipse a linha do código “process” nem compilou, falou que não existe.

daveiga

Pense na lista:

Tipo: Federal
Tempo de Política: 15
Nome: Pafúncio
Idade: 34
Sexo: M
Partido: PCR
Número: 1334
Projeto: Se eleito, prometo me eleger!

A minha ideia era a seguinte:

try {  
       BufferedReader in = new BufferedReader(new FileReader("nome do arquivo"));  
           while (in.ready()) {  
               Deputado d;
               String tipo = in.readLine().replaceFirst("Tipo:","").replaceAll("^\s+","") ; // pra ver se é federal ou estadual, retira da linha o Tipo: e remove os espaços em branco
               if(tipo.equals('Federal')){
                   d = new DeputadoFederal();
               }else{
                   d = new DeputadoEstadual();
               }
                
               d.setTempoPolitica(in.readLine().replaceFirst("Tempo de Política::","").replaceAll("^\s+","") ); // vamos pegar só o valor do Tempo de Política
               // faça o mesmo pra cada atributo, até ter o seu Deputado completo. Validações, conversões de tipo e essas coisas devem ser feitas aqui, atributo a atributo.

           }  
           in.close();  
   } catch (IOException e) {  
   }

O process era só um exemplo, pra você ver que ali você processaria a string.
O ideal era usar um formato padrão como yml, xml, json... pra ler a sua lista o código tem que ser manual, sugiro que você crie uma classe ListaParser ou algo assim, que receba o nome do arquivo no método parse e devolva um ArrayList de Deputados.

A lógica de leitura de 1 deputado pode ficar em um método separado, ta tudo junto ali pra você ter uma ideia do que funciona, lembrando que você precisa saltar uma linha entre um loop e outro, e verificar se não chegou ao fim da lista entre os atributos.

Abraço.

d34d_d3v1l

Serialização é mais trivial…
Tão quanto criar um RandonAcessFile
com registros […]

mas se vc não quiser me escutar, good luck!
Se quiser me escutar,
go google!

boa sorte

F
daveiga:
Pense na lista:

Tipo: Federal
Tempo de Política: 15
Nome: Pafúncio
Idade: 34
Sexo: M
Partido: PCR
Número: 1334
Projeto: Se eleito, prometo me eleger!

A minha ideia era a seguinte:

try {  
       BufferedReader in = new BufferedReader(new FileReader("nome do arquivo"));  
           while (in.ready()) {  
               Deputado d;
               String tipo = in.readLine().replaceFirst("Tipo:","").replaceAll("^\s+","") ; // pra ver se é federal ou estadual, retira da linha o Tipo: e remove os espaços em branco
               if(tipo.equals('Federal')){
                   d = new DeputadoFederal();
               }else{
                   d = new DeputadoEstadual();
               }
                
               d.setTempoPolitica(in.readLine().replaceFirst("Tempo de Política::","").replaceAll("^\s+","") ); // vamos pegar só o valor do Tempo de Política
               // faça o mesmo pra cada atributo, até ter o seu Deputado completo. Validações, conversões de tipo e essas coisas devem ser feitas aqui, atributo a atributo.

           }  
           in.close();  
   } catch (IOException e) {  
   }

O process era só um exemplo, pra você ver que ali você processaria a string.
O ideal era usar um formato padrão como yml, xml, json... pra ler a sua lista o código tem que ser manual, sugiro que você crie uma classe ListaParser ou algo assim, que receba o nome do arquivo no método parse e devolva um ArrayList de Deputados.

A lógica de leitura de 1 deputado pode ficar em um método separado, ta tudo junto ali pra você ter uma ideia do que funciona, lembrando que você precisa saltar uma linha entre um loop e outro, e verificar se não chegou ao fim da lista entre os atributos.

Abraço.

Agora ficou claro, obrigado pela ajuda.

:)

@d34d_d3v1l

É que isto é uma questão de um "teste", devo usar somente o que o professor pediu.

Infelizmente, mas agradeço a sua ajuda e darei uma lida nisto.

Obrigado mesmo assim.

F

Funcionou.

Criado 27 de abril de 2011
Ultima resposta 28 de abr. de 2011
Respostas 7
Participantes 3