Ajuda em ArrayList?

Depois que crio o objeto curso, devo cadastrar as disciplinas nesse curso, que são outros objetos, porém, ao listar os cursos cadastrados, as disciplinas ficam vinculadas a todos os cursos que cadastrei, não apenas a um, segue meus códigos:

package lista;


public class Disciplina {
	
	private String nomeDisciplina;
	private String creditos;
	private String cargaHoraria;
	private String semestre;
	
	public String getNomeDisciplina() {
		return nomeDisciplina;
	}
	public void setnomeDisciplina(String nomeDisciplina) {
		this.nomeDisciplina = nomeDisciplina;
	}
	
	public String getCreditos() {
		return creditos;
	}
	public void setCreditos(String creditos) {
		this.creditos = creditos;
	}
	
	public String getcargaHoraria() {
		return cargaHoraria;
	}
	public void setcargaHoraria(String cargaHoraria) {
		this.cargaHoraria = cargaHoraria;
	}
	public String getSemestre() {
		return semestre;
	}
	public void setSemestre(String semestre) {
		this.semestre = semestre;
	}
	
	@Override
	  public String toString() {
	    return "Disciplina: "+nomeDisciplina+ "" +
	            "\n"+ "Creditos: "+creditos+"" +
	            "\n"+ "Semestre: "+semestre+"" +
	                "\n"+"Carga Horaria: "+cargaHoraria+ "\n" ;
	   
	  }

}





package lista;

import java.util.ArrayList;

public class Curso {
	
	
	private String nomeCurso;
	private String turno;
	private String cargaHoraria;
	private ArrayList<Disciplina> disciplinas;
	
	
	public ArrayList<Disciplina> getDisciplina() {
	    return disciplinas;
	}
	public void setDisciplina(ArrayList<Disciplina> disciplinas) {
		this.disciplinas = disciplinas;
	}
		
	
	public String getNome() {
		return nomeCurso;
	}
	public void setNome(String nomeCurso) {
		this.nomeCurso = nomeCurso;
	}
	
	public String getTurno() {
		return turno;
	}
	public void setTurno(String turno) {
		this.turno = turno;
	}
	
	public String getcargaHoraria() {
		return cargaHoraria;
	}
	public void setcargaHoraria(String cargaHoraria) {
		this.cargaHoraria = cargaHoraria;
	}
	
	@Override
	  public String toString() {
	    return "Nome do Curso: "+nomeCurso+ "" +
	            "\n"+ "Turno: "+turno+"" +
	            "\n"+ "Carga Horaria: "+cargaHoraria+"" +
	                "\n"+"Disciplinas: "+disciplinas+ "\n" ;
	   
	  }
	

}


package lista;

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class Cadastro {
	
	

public static void main(String[] args) {
		
		dadosCadastro();
		
	}
	
public static void dadosCadastro() {
	
	Scanner sc = new Scanner(System.in);
	Curso curso;
	ArrayList<Curso> listaCursos = new ArrayList <Curso> ();
	Disciplina disciplina;
	ArrayList<Disciplina> listaDisciplinas = new ArrayList<Disciplina>();
	
	
	int opcao=0;
	
	
	
	do {
		 System.out.println("Opção 1 - Cadastra curso");
		 System.out.println("Opção 2 - Cadastra disciplinas de um curso");
		 System.out.println("Opção 3 - Imprime cursos cadastrados");
		 System.out.println("Opção 0 - Sair do programa");
		 System.out.print("Digite aqui sua opção: ");
         opcao = Integer.parseInt(sc.nextLine());
         Scanner entrada = new Scanner (System.in);
         
         if(opcao==1) {
        	 curso = new Curso();
        	 //disciplina = new Disciplina();
        	 
        	 System.out.print("Digite o nome do curso: ");
             curso.setNome(sc.nextLine());
              
             System.out.print("Digite o turno: ");
             curso.setTurno(sc.nextLine());
              
             System.out.print("Digite a carga horaria: ");
             curso.setcargaHoraria(sc.nextLine());
             
             
             
             listaCursos.add(curso);
             
             
             System.out.println("Cadastro de disciplinas "); 
             
             
            
             disciplina = new Disciplina();
             
             System.out.print("Digite o nome da Disciplina: ");
             disciplina.setnomeDisciplina(sc.nextLine());
             
             System.out.print("Digite os creditos: ");
             disciplina.setCreditos(sc.nextLine());
							                  
             System.out.print("Digite a carga horaria: ");
             disciplina.setcargaHoraria(sc.nextLine());
             
             System.out.print("Digite o semestre: ");
             disciplina.setSemestre(sc.nextLine());
             
             listaDisciplinas.add(disciplina); 
             
             
             
             for(Curso item: listaCursos) {
            	 
            	
            	 
            	 
             item.setDisciplina(listaDisciplinas);
             
             
             }
                 
        	 
             
           
             
           
    
              
             }else if(opcao == 3){
        	 
        	 System.out.println(listaCursos.toString());
        
        	 System.out.println("Pressione um tecla para continuar.");
        	 sc.nextLine();
             
             } else if(opcao==2) {
        
	}
         }
	

	while (opcao != 0);
    
    sc.close();
}
}

Teu problema está aqui.
Você cria uma única instância do objeto disciplinas e vai adicionando nele todas as disciplinas cadastradas.
O correto, neste caso, é que, a cada Curso criado, você crie uma instância nova deste arraylist. Isso é fácil:

Curso curso = new Curso();
curso.setDisciplinas(new ArrayList<Disciplinas>());

Aí, para inserir cada disciplina no curso, basta fazer:

Disciplina disciplina = new Disciplina();
//Preenche os dados da disciplina
curso.getDisciplinas().add(disciplina);

Entendeu?

1 curtida

Entendi sim!! Muito obrigada pelas informações e pela ajuda !!