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

[code]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();

}
[/code]

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;
	}

}

[code]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());


}

}
[/code]

[code]
public class DeputadosException {

private String msg;

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

}[/code]

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:

[quote]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![/quote]

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)
{
// ....

}
}

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

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

[quote=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[/quote]

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.

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:

[code]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) {
}
[/code]

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.

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

[quote=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:

[code]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) {
}
[/code]

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.
[/quote]

Agora ficou claro, obrigado pela ajuda.

:slight_smile:

@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.

Funcionou.