Ler um txt instanciar um objeto e inserir em um vetor

2 respostas Resolvido
L

Escreva um programa que leia um arquivo texto contendo uma lista de alunos com suas
respectivas notas. Cada linha do arquivo contem o nome do aluno e duas notas, como mostra o
exemplo abaixo:

João,8.5,9.5
Paulo,9.4,10
Pedro,6.5,8.7
Ana,9.1,8.3
Carlos,7.7,8.1

O programa deve ler o arquivo linha a linha e, para cada linha do arquivo, um objeto do tipo
Aluno deve ser instanciado. Cada objeto do tipo aluno instanciado anteriormente deve ser inserido em um vetor de objetos do tipo Aluno. Para este exercício você pode assumir que o vetor tenha no máximo 5 posições.

Para criar um objeto do tipo aluno a partir da linha lida do arquivo utilize o método split da classe
String. Depois de carregar o vetor com os objetos instanciados a partir do arquivo, itere por ele e para cada aluno mostre na tela o nome e a média das notas.

public class Aluno {

	protected String nome;
	protected Float notaGA;
	protected Float notaGB;

	public Aluno(String nome, Float notaGA, Float notaGB) {
		this.nome = nome;
		this.notaGA = notaGA;
		this.notaGB = notaGB;
	}

	public String getNome() {
		return nome;
	}

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

	public Float getNotaGA() {
		return notaGA;
	}

	public void setNotaGA(Float notaGA) {
		this.notaGA = notaGA;
	}
	
	public Float getNotaGB() {
		return notaGB;
	}

	public void setNotaGB(Float notaGB) {
		this.notaGB = notaGB;
	}	
 }

import java.io.*;

 public class CarregaAlunos {

	 protected static Aluno constroiAluno(String linha){
		 String atributos[] = linha.split(",");
		 Aluno a = new Aluno(Sring atributos[0], Float atributos[1], Float atributos[2]);
		 return a;
	 }

	 public static Aluno[] carregaArquivo(String arquivo) throws IOException{
	 	Aluno alunos[] = new Aluno[5];
	 	FileReader fr = new FileReader(arquivo);
	 	BufferedReader br = new BufferedReader(fr);

	 	String linha;
	 	int cont = 0;
	 	while ((linha = br.readLine()) != null){
	 		Aluno a = constroiAluno(linha);
	 		alunos[cont] = a;
	 		cont++;
	 	}
	 	br.close();
	 	return alunos;
	 }

	 public static void main(String[] args) {
		 try{
			 Aluno a[] = carregaArquivo("C:\\arquivo.txt");
			 for (int i=0; i < a.length; i++){
				 System.out.println(a[i]);
			 }
		 }
		 catch(IOException e){
			 e.printStackTrace();
		 }
	 }
}

Estou com um problema na classe CarregaAlunos, nessa atribuição:

Aluno a = new Aluno(Sring atributos[0], Float atributos[1], Float atributos[2]);`

Alguem poderia dar uma luz ?

2 Respostas

A
Solucao aceita

Ola @lciceris,

existe uma diferença entre o que é parâmetro e o que é argumento, parâmetro é o que você vai receber e argumento é o que você passa, quando vc fez o método constroiAluno(String linha); você o construiu da forma contrária como expliquei acima, outro ponto foram os tipos de dados, você espera Float mas você recupera do arquivo String então precisa fazer a conversão da tipagem do dado, a própria classe wrapper de float(Flaot) tem um método para isso chamado valueOf, ex:

altere o seu método para:

protected static Aluno constroiAluno(String linha) {
        String atributos[] = linha.split(",");
        Aluno a = new Aluno(atributos[0] , Float.valueOf(atributos[1]), Float.valueOf(atributos[2]));
    return a;
    }

Quando for imprimir o seu array da forma como fez o máximo que vai conseguir é um toString() do objeto array, então precisa acessar a propriedade do objeto para imprimir, ex:

for (int i = 0; i < a.length; i++) {
                System.out.println("Nome: " + a[i].nome);
                System.out.println("Nota GA: " + a[i].notaGA);
                System.out.println("Nota GB: " + a[i].notaGB);
                System.out.println();
            }

Ou troca esses sys.out por um String.format, ex:

String result = String.format("Nome: %s%nNota GA: %d%nNota GB: %d%n", a[i].nome, a[i].notaGA.longValue(), a[i].notaGB.longValue());
System.out.println(result);
L

Muito obrigado cara, era bem isso mesmo :wink:

Criado 31 de agosto de 2016
Ultima resposta 1 de set. de 2016
Respostas 2
Participantes 2