Exercicio java com OO

E ai pessoal tudo certo?
Sou novato aqui no guj e também em java.
Meu problema é o seguinte, estou fazendo uma prova da minha faculdade que é o seguinte. Cadastrar varios departamentos, varios produtos, informar o nome do departamento que deseja e mostrar todos os produtos relacionados aquele departamento.
O problema é que quando eu busco por um departamento, ele me mostra TODOS os produtos, de qualquer departamento, sendo que deveria mostrar apenas daquele departamento específico. Segue meu código:

import javax.swing.*;
public class CadastroProduto {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Departamento dep[] = new Departamento[999];
		Produto pro[] = new Produto[999];
		int p=0;
		int d=0;
		int op=0;
		
		while(true){
			
			op=Integer.parseInt(JOptionPane.showInputDialog("1- CADASTRA DEPTO \n 2- CADASTRA PRODUTO \n 3- BUSCA POR POR DEPARTAMENTO" +
					"\n 4- BUSCA POR PREÇO \n 5- SAIR"));
			
			switch(op){
			
			case 1:
				dep[d] = new Departamento();
				dep[d].setNomedepto(JOptionPane.showInputDialog("NOME DO DEPARTAMENTO"));
				dep[d].setNomegerente(JOptionPane.showInputDialog("NOME DO GERENTE"));
				
				d=d+1;
				
				break;
				
			case 2:
				pro[p] = new Produto();
				pro[p].setNome(JOptionPane.showInputDialog("NOME DO PRODUTO"));
				pro[p].setCodigo(Integer.parseInt(JOptionPane.showInputDialog("CÓDIGO DO PRODUTO")));
				pro[p].setPreco(Double.parseDouble(JOptionPane.showInputDialog("PREÇO DO PRODUTO")));
				String nomeD=JOptionPane.showInputDialog("EM QUAL DEPARTAMENTO SERA CADASTRADO?");
				for(int i=0; i < d; i++){
					if(nomeD.equalsIgnoreCase(dep[i].getNomedepto()));
					pro[i].setDepartamento(dep[i]);
				}
				p=p+1;
				
				break;
				
			case 3:
				String busca=JOptionPane.showInputDialog("NOME DO DEPARTAMENTO A SER BUSCADO");	
				String txt="";
				for(int i=0; i < d; i++){					
					if(busca.equalsIgnoreCase(dep[i].getNomedepto())){
						for(i=0; i < p; i++){
							txt= txt + "\n" + "PRODUTOS:" + " "+ pro[i].getNome();
					}
					}
				}
				JOptionPane.showMessageDialog(null," " + txt);
				
				break;
			}
		}
	}
}

Alguem pode me dar uma Luz?

Desde já agradeço

Faz um debug do if da linha 50 (coloca um breakpoint nessa linha) e verifica o que está acontecendo nesse teste, principalmente quando o programa imprime o produto errado. Aí posta aqui, porque assim de olho fica confuso.

case 3:
String busca=JOptionPane.showInputDialog(“NOME DO DEPARTAMENTO A SER BUSCADO”);
String txt="";
for(int i=0; i < d; i++){
if(busca.equalsIgnoreCase(dep[i].getNomedepto())){
for(i=0; i < p; i++){ //PRA QUE ESSE FOR??? PELO QUE ENTENDI O PRODUTO 1 eh do DEPARTAMENTO 1 correto? e assim vai. ENTAO SE o IF eh TRUE pega o valor de i do PRIMEIRO FOR!!! axo q eh isso, pq como entro no IF e tem o SEGUNDO FOR tu ta contatenando TUDO na STRING TXT!!! meu teclado TA MALUCO por isso ta esses CAPS ATIVA e DESATIVA!!!
txt= txt + “\n” + “PRODUTOS:” + " “+ pro[i].getNome();
}
}
}
JOptionPane.showMessageDialog(null,” " + txt);

            break;

Este segundo for e para correr o vetor. Se eu nao colocar ele so vai mostrar 1 produto apenas cadastrado naquele departamento

entao amigo creio eu que sua logica esta equivocada!!!

pois onde voce esta associando que DEPARTAMENTO tem um LISTA DE PRODUTOS??? do jeito q esta se entende que cada posicao do departamento equivale a uma posicao do produto!!!

Para ter varios Departamentos e cada um ter SEUS PRODUTOS, vc deveria criar um meio de associar isso, por exemplo dentro da classe DEPARTAMENTO criar um atributor de array do tipo classe produto!!!

depois crie um array de DEPARTAMENTO, e ao cadastrar o departamento, vc seleciona qual departamento que cadastrar produtos!!!

como?? dep[i].setProdutos[i].add(“NOME DO PRODUTO”). pode se usar um ARRAY LIST ou um VECTOR sei la.

depende como voce implemento