Problemas de cadastro de produtos e departamentos

[b]case 3 deve retonar pesquisa de departamento e
seus produtos só que esta retornando todos os
produtos cadastrados em qualquer departamento pesquisado

[/b]

import javax.swing.JOptionPane;
	public class CadastroProdutoDepto {


	public static void main(String[] args) {
	Departamento dep[]=new Departamento[999];
	Produto pro[]=new Produto[999];
	int op=0;
	int d=0;
	int p=0;
	while(true){
	op=Integer.parseInt(JOptionPane.showInputDialog("1-CADASTRA DEPARTAMENTOO\n"+
	"2-CADASTRAPRODUTO EM UM DEPARTAMENTO\n"+
	"3-BUSCA POR DEPARTAMENTO \n"+ 
	"4-PESQUISA POR PREÇO \n"+
	"5-SAIR"));
	switch(op){
	//Começa a cadastrar Deptos
	case 1:
	dep[d]=new Departamento();
	dep[d].setNomedepto(JOptionPane.showInputDialog("NOME DO DEPARTAMENTOO:"));
	dep[d].setNomegerente(JOptionPane.showInputDialog("NOME DO GERENTE:"));

	d=d+1;                                                                                                                 
	break;                                                        
	//Faz o cadastro dos Produtos
	case 2:
	String nome = (JOptionPane.showInputDialog("DEPARTAMENTO À CADASTRAR PRODUTOS"  ));
    for (int i=0;i<d;i++) {
    if (nome.equalsIgnoreCase(dep[i].getNomedepto( ))){ //achou o departamento
    JOptionPane.showMessageDialog(null, "DEPARTAMENTO :" + dep[i].getNomedepto( ));
	pro[p]=new Produto();
	pro[p].setNome(JOptionPane.showInputDialog("NOME DO PRODUTO  "));
    pro[p].setPreco(Double.parseDouble(JOptionPane.showInputDialog("PREÇO  ")));
	pro[p].setCodigo(Integer.parseInt(JOptionPane.showInputDialog("CÓDIGO DO PRODUTO  ")));
    pro[p].setDepartamento(dep[d]);
    p=p+1;
    break;
}
}
break;
    //Faz a busca por Departamento e mostra os produtos relacionados
    case 3:
    String busca=JOptionPane.showInputDialog("DIGITE O DEPARTAMENTO DESEJADO");//O ERRO É POR AQUI
    for(int i=0; i < d; i++){
    if(busca.equalsIgnoreCase(dep[d].getNomedepto())){
    for(i=0; i < p; i++){
    JOptionPane.showMessageDialog(null,"PRODUTOS  " + pro[i].getNome());
    }                               
    } 
    }                               
    break;
    //Faz a busca por valores
    case 4:
    double precoinicio=Double.parseDouble(JOptionPane.showInputDialog("DIGITE O VALOR MINIMO"));
    double precofim=Double.parseDouble(JOptionPane.showInputDialog("DIGITE O VALOR MAXIMO")); 
    boolean valor=false;
    for(int m=0; m < p; m++){
    if(precoinicio <= pro[m].getPreco() && precofim >= pro[m].getPreco()){
    valor=true;
    JOptionPane.showMessageDialog(null,"PRODUTOS  " + pro[m].getNome()+"PREÇOS " + pro[m].getPreco() );
}
}
   if(! valor){
   JOptionPane.showMessageDialog(null,"NENHUM VALOR CADASTRADO");
}                                
   break;
   case 5:
   System.exit(0);
 }
 }
 }
 }

========================================================================================

public class Departamento {
	
        private String nomeDepto;
        private String nomeGerente;
        public Departamento(){
        nomeDepto="";
        nomeGerente="";
        }
        public Departamento(String snomeDepto, String snomeGerente, Produto prod){
        nomeDepto=snomeDepto;
        nomeGerente=snomeGerente;
        }
        public void setNomedepto(String snomeDepto){
                nomeDepto=snomeDepto;
        }        
        public void setNomegerente(String snomeGerente){
                nomeGerente=snomeGerente;
        }        
       public String getNomedepto(){
                return nomeDepto;        
       }        
       public String getNomegerente(){
                return nomeGerente;
       }
}

========================================================================================

public class Produto { 
               private int codigo;
        private String nome;
        private double preco;
        Departamento departamento;
                public Produto(){
                codigo=0;
                nome="";
                preco=0.0;
                departamento=null;
        }
        public Produto(int icodigo, String snome, double dpreco, Departamento depto){
                codigo=icodigo;
                nome=snome;
                preco=dpreco;
                departamento=depto;
        }        
        public void setCodigo(int icodigo){
                codigo=icodigo;
        }        
        public void setNome(String snome){ 
               nome=snome;
        }
        public void setPreco(double dpreco){
                preco=dpreco;
        }
        public void setDepartamento(Departamento depto){
                departamento=depto;        
        }
        public int getCodigo(){
                return codigo;        
        }        
        public String getNome(){
                return nome;
        }        
        public double getPreco(){ 
               return preco;        
       }        
       public Departamento getDepartamento(){
                return departamento;        
      }        
      public String getNomeDepartamento(){
                return departamento.getNomedepto();
      }
}

Vc deve fazer apenas um for comparando o nome do departamento digitado com o nome do departamento do produto.
Faz um for com “i < p” e com o if comparando o departamento digitado com o cadastrado.