Colocando lista dentro de lista

6 respostas
S
Boa tarde pessoal, estou fazendo um programa e estou com umas duvidas... Quero criar um programa que existe um diretor que vai cadastrar uma turma de alunos dentro de uma lista, cada turma vai possuir um professor, a quantidade de alunos e uma string de identificação...
public class Turma 
{

Professor professor;
 String serie;
int tamanho;

}
criei esse metodo dentro da classe diretor para cadastrar as turmas
public void cadastrarTurma(){
	
	List <Turma> lis_turma = new ArrayList<Turma>(); 
	   
        Scanner sc = new Scanner(System.in);
	
		System.out.println("Quantas turmas deseja criar?");
		int numeroTurmas=sc.nextInt();
		
		for (int i=0; i < numeroTurmas; i++)
		{  
			
			Turma turma  = new Turma();
			System.out.println("Qual o tamanho da turma?");
			turma.tamanho(sc.nextInt());
			System.out.println("Qual a serie da turma?ex(1-a,2-a,3-a,4-a)");
			turma.serie(sc.next());
			
			lis_turma.add(turma);
			
		
		}
Depois disso criei uma classe secretário que vai ser responsável por colocar os alunos nas turmas, ai é que tá meu problema! quero criar uma lista de alunos e colocar ela dentro da outra lista turma de acordo com a serie(1°a, 2°b e por ai vai)...
public void cadastrarAluno(turma.getTamanho()){
	Scanner sc = new Scanner(System.in);
        int numeroAlunos;
        System.out.println("Digite a quantidade de aluno que deseja cadastrar"); 
        numeroAlunos=sc.nextInt(); 
    	
    	List <Aluno> lista_alunos1 = new ArrayList<Aluno>(); 
    	List <Aluno> lista_alunos2 = new ArrayList<Aluno>(); 
    	List <Aluno> lista_alunos3 = new ArrayList<Aluno>(); 
    	List <Aluno> lista_alunos4 = new ArrayList<Aluno>(); 
    	for (int i=0; i < numeroAlunos; i++){  
              
            Aluno aluno = new Aluno();  
            System.out.println("Digite a serie do aluno(1,2,3 ou 4)"); 
            aluno.setSerie(sc.nextInt());
            System.out.println("Digite o nome do "+(i+1)+"º aluno");  
            aluno.nome=sc.nextLine();  
            System.out.println("Digite o cpf do aluno");  
            aluno.cpf=sc.nextLine();  
            System.out.println("Digite o endereço do aluno");  
            aluno.endereço=sc.nextLine();  
            System.out.println("Digite a data de nascimento do aluno");  
             aluno.data_nascimento=sc.next();
            System.out.println("Digite o nome do pai aluno");  
            aluno.setNome_pai(sc.nextLine());
            System.out.println("Digite o nome da mae aluno");  
            aluno.setNome_mae(sc.nextLine());
            
        	
            if(aluno.getSerie()==1 && lista_alunos1.size()<lis_turma.turma.tamanho())
            { lista_alunos1.add(aluno);}
            
            if(aluno.getSerie()==2 && lista_alunos2.size()<lis_turma.turma.tamanho())
            { lista_alunos2.add(aluno);}
            
            if(aluno.getSerie()==3 && lista_alunos3.size()<lis_turma.turma.tamanho())
            { lista_alunos3.add(aluno);}
            
            if(aluno.getSerie()==4 && lista_alunos4.size()<lis_turma.turma.tamanho())
            { lista_alunos4.add(aluno);}
            
            
    	}
Queria colocar essas listas de alunos dentro da lista turma de acordo com a serie, alguem pode me ajudar?? agradeço desde já

6 Respostas

lele_vader

Acredito que terá que usar um mapa, cuja chave é a série e o valor seria a lista de alunos da série.

nel

Meu ponto de vista é que tu pode ter um Map e dentro dele, outro Map.
O map “externo” tem a chave que é a série, conforme idéia do lele_vader. Usando essa chave, você acessa o Map “interno”, que é o value do map mesmo.
Nesse map “interno”, você tem como chave a turma e como valor a lista de alunos. Afinal, uma série pode ter N turmas e cada turna N alunos, correto ?

Ficaria assim, eu diria:

Map<String, Map<Integer, List<Aluno>>> map = new HashMap<String, Map<Integer, List<Aluno>>>();

Espero não ter esquecido de abrir/fechar nenhum “< >” ai. Mas enfim, é uma sugestão.
Abraços.

S

Sou iniciante em java, ainda não vi nada a respeito de map… como é que ficaria o codigo??

nel
Sg5001:
Sou iniciante em java, ainda não vi nada a respeito de map... como é que ficaria o codigo??

Já lhe mostrei como deve instanciar o Map, de resto é procurar exemplos na internet e ler o javadoc dele, no qual postei acima o link.
Basicamente, é algo do tipo :

Map<Integer, List<Aluno>> turmas = new HashMap<Integer, List<Aluno>>();
turmas.put(1, lista1);
turmas.put(2, lista2);

Map<String, Map<Integer, List<Aluno>>> map = new HashMap<String, Map<Integer, List<Aluno>>>(); 
map.put("terceira", turmas);

//recuperar
Map<Integer, List<Aluno>> serieTerceira = map.get("terceira");
List<Aluno> turma1 = serieTerceira.get(1);

Dei nomes meio "bobões", mas para ficar claro a compreensão.
De resto, é ler o javadoc, procurar exemplos e treinar.

Abraços.

S

Beleza, vou procurar exemplos… mas daria certo se fizesse esse programa colocando lista dentro de outras? Lembrando que esse programa tem que ser todo OO

nel

Sim, dá. Você pode criar um objeto “Serie” e outro “Turma”. No objeto “Serie” tu pode armazenar somente a serie e uma lista de Turma e no objeto “Turma” tem terá a turma e a lista de alunos daquela Turma. O objeto aluno pode usar de composição, tendo nele um objeto “Serie” e um objeto “Turma”, assim, tu sabe para qual turma e serie o aluno pertence, bem como todos os alunos de uma Turma e assim por diante.

Só dai é lógica e pensar com calma. Tu pode ter uma Lista de serie, já que para cada serie tu terá uma lista de turmas e para cada turma uma lista de alunos. Mas te garanto que com Map é muito mais simples, de qualquer forma, fica a dica ai.

Criado 3 de maio de 2012
Ultima resposta 3 de mai. de 2012
Respostas 6
Participantes 3