ArrayList

Alguém sabe algum artigo de arraylist completo q possa me ajudar?
valeu
um abraço a todos

Hello Collections

Exemplo eu tenho uma classe Estudante como os atributos nome e nota, e os metodos getNota() e getNome().
Eu tenho uma outra classe chamada Turma e dentro dela um ArrayList classe; dentro de um método da classe Turma:
classe.get(0).getNota();
da ArrayList classe pegar o objeto da posição e mostrar sua nota, pq isso não funciona, alguém pode me ajudar?
muitoo obrigado.

ola!
se for no java 1.4:

Estudante objEstudante = (Estudante) classe.get(0);
objEstudante.getNota();

ja se for no java 5, o seu ArrayList da classe Turma tem que ter o tipo declarado, pois assim vai funcionar do jeito que você esta perguntando:

ArrayList<Estudante> estudantes = new ArrayList<Estudante>;
estudantes.get(0).getNota();

Abraços

Vê esse links.


http://www.devmedia.com.br/articles/viewcomp.asp?comp=3234&hl=java%20collection

E tb tem um capítulo sobre o assunto Coleção na apostila da caelum. Baixa a partir desse link.

Java e Orientação a Objetos

olha se meu resumo… em anexo ti ajuda… capitulo 7.

flw! :smiley:

galera olha so to com um nova problema se alguem puder me ajudar, ficarei feliz!
CLasse aluno:

public class Aluno {
    int codAluno;
    String nome;
    public float nota1;
    public float nota2;
    public float nota3;
    
    
    public Aluno(int codAluno, String nome, float nota1, float nota2, float nota3) {
    	
    }
    public int getCodAluno() {
		return codAluno;
	}
	
	public String getNome() {
		return nome;
	}
	
	public float getNota1() {
		return nota1;
	}
	
	public float getNota2() {
		return nota2;
	}
	
	public float getNota3() {
		return nota3;
	}
	
	
	
}

classe Aprovados:

import java.util.ArrayList;
  public class Aprovados {
      ArrayList<Aluno> alunos;
      ArrayList<Aluno> aprovados;
      ArrayList<Aluno> reprovados;
	public Aprovados() {
		ArrayList<Aluno> alunos = new ArrayList<Aluno>();
		ArrayList<Aluno> aprovados = new ArrayList<Aluno>();
		ArrayList<Aluno> reprovados = new ArrayList<Aluno>();
	}

	public void insereAluno(Aluno a) {
		alunos.add(a);
		
	}
	public void calculaMedia() {
		for (int i = 0; i < alunos.size(); i++ ) {
			Aluno a =(Aluno) alunos.get(i);
			if	(alunos.get(i).getNota1() + alunos.get(i).getNota2() + alunos.get(i).getNota3()/3 >= 6) {
		 aprovados.add(alunos.get(i));
		} else {
			reprovados.add(alunos.get(i));
		}
		
			
		}
	}
	
	
}

public class Principal {

	public static void main(String[] args) {
		Aprovados ap = new Aprovados();
		Aluno al = new Aluno(00, "Jorge", 8, 9, 10 );
		Aluno al1 = new Aluno(01, "Maria", 4, 4, 6 );
	    ap.insereAluno(al);
	    ap.insereAluno(al1);
		ap.calculaMedia();
		
		
	}
 
}

O erro que dá na classe principal é quando voi compilar Exception in thread "main" java.lang.NullPointerException at Aprovados.insereAluno(Aprovados.java:13) at Principal.main(Principal.java:8)

No meu ponto de vista, era pra dar certo, se alguem puder me da uma luz ai eu agradeço. Abraços.

Seu problema está no construtor da classe Aprovados.

Você está criando novas variáveis locais. Substitua o construtor para:

public Aprovados() { this.alunos = new ArrayList<Aluno>(); this.aprovados = new ArrayList<Aluno>(); this.reprovados = new ArrayList<Aluno>(); }

Uma dica… Ao invés de declarar o seu ArrayList assim:
ArrayList<Aluno> alunos = new ArrayList<Aluno>;

declare assim:
List<Aluno> alunos = new ArrayList<Aluno>();

Isso permite que você troque a implementação da lista no futuro. Se quiser saber mais detalhes do porque leia esse tópico:
http://www.guj.com.br/posts/list/55387.java#290673

Outra dica.

Quando estiver percorrendo uma lista, não faça através de for. Use ou for each ou, se precisar excluir elementos no processo, um iterator. Abaixo segue o seu código modificado para cada um dos casos:

For each:

[code]//Use nomes significativos para suas funções.
public void separarReprovadosDeAprovados() {
//Não se esqueça de limpar a lista para evitar duplicação caso o
//método seja chamado duas vezes.

aprovados.clear();
reprovados.clear();

//Esse for se lê assim: Para cada aluno “aluno” na lista de Alunos.
for (Aluno aluno : alunos) {
if (aluno.getNota1() + aluno.getNota2() + alunos.getNota3()/3 &gt= 6) {
aprovados.add(aluno);
} else {
reprovados.add(aluno);
}
}
}[/code]

Código com iterator:

[code]
public void separarReprovadosDeAprovados() {
aprovados.clear();
reprovados.clear();

Iterator it = alunos.iterator();

//Enquanto temos alunos na lista
while (it.hasNext()) {
Aluno aluno = it.next(); //Pegamos o próximo aluno
if (aluno.getNota1() + aluno.getNota2() + alunos.getNota3()/3 &gt= 6) {
aprovados.add(aluno);
} else {
reprovados.add(aluno);
}
}
}[/code]

A vantagem do iterator é que tem o método it.remove(), que remove o último aluno acessado. O iterator também era a única opção disponível antes do java 5.

Tanto o for each, quanto o iterator, vão percorrer a lista da maneira mais eficiente possível.

No caso do seu for, se a lista for uma LinkedList, você terá problemas sérios de performance, pois cada chamada ao get percorrerá a lista inteira atrás do elemento.

Nem o foreach (que usa o iterator implicitamente) e nem o iterator tem esse problema. No caso de você precisar percorrer a lista nas duas direções, a classe List também disponibiliza um iterador bidirecional, chamado de ListIterator.

O for each tem ainda a vantagem de apresentar uma sintaxe bastante enxuta, melhor até do que usando o for, como você havia feito.

Mais uma última dica. Separe a média para aprovação do aluno numa constante chamada MEDIA. Isso facilita muito a manutenção do código.

A classe final ficaria:

[code]import java.util.List;
import java.util.ArrayList;

public class Aprovados {
List alunos;
List aprovados;
List reprovados;
public static final float MEDIA = 6.0F;

public Aprovados() {
alunos = new ArrayList();
aprovados = new ArrayList();
reprovados = new ArrayList();
}

public void insereAluno(Aluno a) {
alunos.add(a);
}

public void separarReprovadosDeAprovados() {
aprovados.clear();
reprovados.clear();

  for (Aluno aluno : alunos) {
     if (aluno.getNota1() + aluno.getNota2() + alunos.getNota3()/3 &gt= MEDIA) {
        aprovados.add(aluno);
     } else {
        reprovados.add(aluno);
     }
  }

}
}[/code]

oi !!

to fazendo um programa q usa 2 arraylist, mas ta dando pauuuuu!!

alguem pode me ajudar??
eu quero o seguinte se pessoa ja tiver demerito eu não quero que crie
um novo arraylist x, apenas quero que add a pessoa um novo demerito .

ai vai o codigo

public void inserirPessoa () {

	Pessoa p = new Pessoa();
	

	p.setNome(tec.next());
	
	ArrayList x = new ArrayList();	
	x.add(inserirDemerito());
	p.setDemerito(x);
	listaPessoas.add(p);
	
}

Torne o seu arraylist uma propriedade da classe e dê o new apenas no construtor.

valeu pelas dicas vini, so mais uma coisa o q significa aquele OF no atributo media?
flww abraço

Aquilo não é a letra “O” e sim o número 0.

Por default, o literal 6.0 escrito no código é um double. Colocando o F depois no número, ele entende que é um float.

Vini,

eu axo q não da pra fazer isso, pois Pessoa é um arrayList cada pessoa tem outro arraylist chamado demerito.
vc axa q da certto por no construtor?

ai vini, usei aquele for q vc me sugeriu a classe Aprovados ficou

import java.util.List;
 import java.util.ArrayList;
 
 public class Aprovados {
    List<Aluno> alunos;
    List<Aluno> aprovados;
    List<Aluno> reprovados;
    public static final float media = 6.0F;
 
    public Aprovados() {
       this.alunos = new ArrayList<Aluno>();
       this.aprovados = new ArrayList<Aluno>();
       this.reprovados = new ArrayList<Aluno>();
    }
  
    public void insereAluno(Aluno a) {
       alunos.add(a);
    }
 
    public void separarReprovadosDeAprovados() {
       aprovados.clear(); 
       reprovados.clear();
 
       for (Aluno aluno : alunos) {
          if (aluno.getNota1() + aluno.getNota2() + aluno.getNota3()/3 >= media) {
             aprovados.add(aluno);
          } else {
             reprovados.add(aluno);
          }
       }
    } 	
 }

ai coloquei o seguinte na classe Principal


public class Principal {

	public static void main(String[] args) {
		Aprovados ap = new Aprovados();
		Aluno al = new Aluno(00, "Jorge", 8, 9, 10 );
		Aluno al1 = new Aluno(01, "Maria", 4, 4, 6 );
	    ap.insereAluno(al);
	    ap.insereAluno(al1);
		ap.separarReprovadosDeAprovados();
		System.out.println(ap.alunos);	
		
	}		
		
	
 
}

ai na classe alunos eu coloquei mais o metodo toString()


public class Aluno {
    int codAluno;
    String nome;
    public float nota1;
    public float nota2;
    public float nota3;
    
    
    public Aluno(int codAluno, String nome, float nota1, float nota2, float nota3) {
    	
    }
    public int getCodAluno() {
		return codAluno;
	}
	
	public String getNome() {
		return nome;
	}
	
	public float getNota1() {
		return nota1;
	}
	
	public float getNota2() {
		return nota2;
	}
	
	public float getNota3() {
		return nota3;
	}
	public String toString() {
    	return nome;
    }
	
	
}

qdo eu compilo a principal da

[null, null]
tens ideia do q eh isso?
valeuu abraços.

ai vini, usei aquele for q vc me sugeriu a classe Aprovados ficou

import java.util.List;
 import java.util.ArrayList;
 
 public class Aprovados {
    List<Aluno> alunos;
    List<Aluno> aprovados;
    List<Aluno> reprovados;
    public static final float media = 6.0F;
 
    public Aprovados() {
       this.alunos = new ArrayList<Aluno>();
       this.aprovados = new ArrayList<Aluno>();
       this.reprovados = new ArrayList<Aluno>();
    }
  
    public void insereAluno(Aluno a) {
       alunos.add(a);
    }
 
    public void separarReprovadosDeAprovados() {
       aprovados.clear(); 
       reprovados.clear();
 
       for (Aluno aluno : alunos) {
          if (aluno.getNota1() + aluno.getNota2() + aluno.getNota3()/3 >= media) {
             aprovados.add(aluno);
          } else {
             reprovados.add(aluno);
          }
       }
    } 	
 }

ai coloquei o seguinte na classe Principal


public class Principal {

	public static void main(String[] args) {
		Aprovados ap = new Aprovados();
		Aluno al = new Aluno(00, "Jorge", 8, 9, 10 );
		Aluno al1 = new Aluno(01, "Maria", 4, 4, 6 );
	    ap.insereAluno(al);
	    ap.insereAluno(al1);
		ap.separarReprovadosDeAprovados();
		System.out.println(ap.alunos);	
		
	}		
		
	
 
}

ai na classe alunos eu coloquei mais o metodo toString()


public class Aluno {
    int codAluno;
    String nome;
    public float nota1;
    public float nota2;
    public float nota3;
    
    
    public Aluno(int codAluno, String nome, float nota1, float nota2, float nota3) {
    	
    }
    public int getCodAluno() {
		return codAluno;
	}
	
	public String getNome() {
		return nome;
	}
	
	public float getNota1() {
		return nota1;
	}
	
	public float getNota2() {
		return nota2;
	}
	
	public float getNota3() {
		return nota3;
	}
	public String toString() {
    	return nome;
    }
	
	
}

qdo eu compilo a principal da

[null, null]
tens ideia do q eh isso?
valeuu abraços.

Laisa, que dá certo dá.

Tem como anexar o código da classe toda? Aí te mostro como fazer.

Uma dica. Não pegue carona no tópico dos outros. Se puder, abra seu próprio tópico. Assim evita essa confusão de posts misturados e mais gente vai ver o seu problema e te ajudar. :wink:

Figo,

O seu construtor da classe Aluno está recebendo os parâmetros mas não está gravando os valores nas propriedades.

O correto seria:

[code]public Aluno(int codAluno, String nome, float nota1, float nota2, float nota3) {
//Faça alguma validações para ter certeza que os parâmetros estão
//certos, por exemplo
if (nome == null || nome.trim().length() == 0)
throw new IllegalArgumentException(“O nome deve ser fornecido!”);

//Depois, se tudo estiver ok, associe cada propriedade de sua classe
//a um dos campos da classe.
this.codAluno = codAluno;
this.nome = nome;
this.nota1 = nota1;
this.nota2 = nota2;
this.nota3 = nota3;
}[/code]

eh verdade, eu ja tinha alterado ontem a noite esqueci de retificar o topico, o problema agora eh q estou dando println no arraylist reprovados e esta vazio, sendo que ele estao todos no arraylist aprovados

[code]public class Aluno {
int codAluno;
String nome;
public float nota1;
public float nota2;
public float nota3;

public Aluno(int codAluno, String nome, float nota1, float nota2, float nota3) {   
   this.codAluno = codAluno;   
   this.nome = nome;   
   this.nota1 = nota1;   
   this.nota2 = nota2;   
   this.nota3 = nota3;   
}   
public int getCodAluno() {   
  return codAluno;   

}

public String getNome() {
return nome;
}

public float getNota1() {
return nota1;
}

public float getNota2() {
return nota2;
}

public float getNota3() {
return nota3;
}
public String toString() {
return nome;
}

  [/code]

}

[code]
import java.util.List;
import java.util.ArrayList;

public class Aprovados {
List alunos;
List aprovados;
List reprovados;
public static final float media = 6.0F;

public Aprovados() {   
   this.alunos = new ArrayList<Aluno>();   
   this.aprovados = new ArrayList<Aluno>();   
   this.reprovados = new ArrayList<Aluno>();   
}   
 
public void insereAluno(Aluno a) {   
   alunos.add(a);   
}   

public void separarReprovadosDeAprovados() {   
   aprovados.clear();    
   reprovados.clear();   

   for (Aluno aluno : alunos) {   
    if  (aluno.getNota1() + aluno.getNota2() + aluno.getNota3()/3 >= media) {   
         aprovados.add(aluno);   
      } else {   
         reprovados.add(aluno);   
      }   
   }   
     
}       

} [/code] como se o else nao existe estao todos no aprovados
essa eh a principal

[code]public class Principal {

public static void main(String[] args) {
Aprovados ap = new Aprovados();
Aluno al = new Aluno(00, “Jorge”, 8, 9, 10 );
Aluno al1 = new Aluno(01, “Maria”, 4, 4, 6 );
Aluno al2 = new Aluno(02, “Sebastião”, 3, 4,5);
Aluno al3 = new Aluno(03, “Joaquina”,4,2,1 );
ap.insereAluno(al);
ap.insereAluno(al1);
ap.insereAluno(al2);
ap.insereAluno(al3);
ap.separarReprovadosDeAprovados();
System.out.println(ap.aprovados);
System.out.println(ap.reprovados);
}

}
[/code] se puder me ajuda ai, agradeçco desculpa te encomoda tanto.
abraço