Problema de lógica

Bom meu trabalho consiste em uma licitação pública onde a partir de uma classe EMPRESAPUBLICA se cria uma licitação então a licitação é enviada a três fornecedore previamente cadastrados dependendo do tipo da condição o fornecedor envia ou não uma proposta. Só não to conseguindo ver uma maneira da classe Especialista julgar uma licitação. A classe especialista não pode ter contato com os fornecedores, ela deve pegar os dados do fornecedor através da classe EmpresaPública

[code] //public class EmpresaPublica
{
private String numero;
private int objeto;
private String descricao;
private int tipo;
Fornecedor fornecedores;
public EmpresaPublica(String numero, int objeto, String descricao, int tipo)
{
this.numero = numero;
this.objeto = objeto;
this.descricao = descricao;
this.tipo = tipo;
}
public EmpresaPublica(Fornecedor fornecedores)
{
this.fornecedores = fornecedores;
}
public String getNumero()
{
return this.numero;
}
public void setNumero(String numero)
{
this.numero = numero;
}
public int getObjeto()
{
return this.objeto;
}
public void setObjeto(int objeto)
{
this.objeto = objeto;
}
public String getDescricao()
{
return this.descricao;
}
public void setDescricao(String descricao)
{
this.descricao = descricao;
}
public int getTipo()
{
return this.tipo;

}
public void setTipo(int tipo)
{
this.tipo = tipo;
}
public void imprimeDados()
{
System.out.println("NÚMERO: " + numero);
System.out.println("OBJETO: " + objeto);
System.out.println("DESCRIÇÃO: " + descricao);
System.out.println("TIPO: " + tipo);
}
//----------------------------------------------------------------------------------------------------------------------------------------
//Através destes métodos a Empresa Pública recebe os dados das propostas dos agentes fornecedores
//----------------------------------------------------------------------------------------------------------------------------------------
public String getNomeFEP()
{
return fornecedores.getNome();
}
public int getAtividadecomercialFEP()
{
return fornecedores.getAtividadecomercial();
}
public double getPrecoFEP()
{
return fornecedores.getPreco();
}
public double getPrazoFEP()
{
return fornecedores.getPrazo();
}
//----------------------------------------------------------------------------------------------------------------------------------------

}
public class Fornecedor
{
private String nome;
private int atividadecomercial;
private double preco;
private double prazo;
EmpresaPublica licitacao;
public Fornecedor(String nome, int atividadecomercial, EmpresaPublica licitacao)
{
this.nome = nome;
this.atividadecomercial = atividadecomercial;
this.licitacao = licitacao;
}
public String getNome()
{
return this.nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
public int getAtividadecomercial()
{
return this.atividadecomercial;
}
public void setAtividadecomercial(int atividadecomercial)
{
this.atividadecomercial = atividadecomercial;
}
public double getPreco()
{
return this.preco;
}
public void setPreco(double preco)
{
this.preco = preco;
}
public double getPrazo()
{
return this.prazo;
}
public void setPrazo(double prazo)
{
this.prazo = prazo;

}   
public void imprimeDados()
{
    System.out.println("NOME: " +nome);
    System.out.println("ATIVIDADE COMERCIAL: " +atividadecomercial);
    System.out.println("PREÇO: " +preco);
    System.out.println("PRAZO: " +prazo);
    licitacao.imprimeDados();        
} 
//--------------------------------------------------------------------------------------------------------------------------------------
//Através destes métodos os agentes fornecedores recebm da Empresa Pública os dados da licitação
//--------------------------------------------------------------------------------------------------------------------------------------
public String getNumeroEPF()
{
    return licitacao.getNumero();
}
public int getObjetoEPF()
{
    return licitacao.getObjeto();
}
public String getDescricaoEPF()
{
    return licitacao.getDescricao();
}
public int getTipoEPF()
{
    return licitacao.getTipo();
}
//---------------------------------------------------------------------------------------------------------------------------------------
//Através deste método o agente fornecedor decide se participa na licitação
//---------------------------------------------------------------------------------------------------------------------------------------

public boolean avaliaParticipacao1()
{
     if(licitacao.getObjeto() == (getAtividadecomercial()))
     {
         return true;
     }
     else
     {
         return false;
     }
}
public boolean avaliaParticipacao2()
{
    if(licitacao.getTipo() == 1)
    {    
        return true;
    }
    else
    {    
        return false;
    }
}    
public boolean avaliaParticipacao3()
{       
    if(licitacao.getTipo() == 2 || licitacao.getTipo() == 3)
    {
        return true;
    }
    else
    {
        return false;
    }
}

}
public class Especialista
{
private String nome;
EmpresaPublica licitacao;
public Especialista(EmpresaPublica licitacao)
{
this.licitacao = licitacao;
}
public Especialista(String nome, EmpresaPublica licitacao)
{
this.nome = nome;
this.licitacao = licitacao;
}
//---------------------------------------------------------------------------------------------------------------------------------------
//Através destes métodos os agentes especialistas recebem da Empresa Pública os dados da licitação
//---------------------------------------------------------------------------------------------------------------------------------------
public String getNumeroEPE()
{
return licitacao.getNumero();
}
public int getObjetoEPE()
{
return licitacao.getObjeto();
}
public String getDescricaoEPE()
{
return licitacao.getDescricao();
}
public int getTipoEPE()
{
return licitacao.getTipo();
}

//---------------------------------------------------------------------------------------------------------------------------------------
//Através destes métodos os agentes especialistas recebem da Empresa Pública os dados das propostas
//---------------------------------------------------------------------------------------------------------------------------------------
public String getNomeFEPE()
{
    return licitacao.getNomeFEP();
}
public int getAtividadecomercialFEPE()
{
    return licitacao.getAtividadecomercialFEP();
}
public double getPrecoFEPE()
{
    return licitacao.getPrecoFEP();
}
public double getPrazoFEPE()
{
    return licitacao.getPrazoFEP();
}
//---------------------------------------------------------------------------------------------------------------------------------------
//Através destes métodos os agentes especialistas julgam as propostas recebidas pela Empresa Pública
//---------------------------------------------------------------------------------------------------------------------------------------
 
public void imprimeDados()
{
    System.out.println("NOME: " +nome);
    licitacao.imprimeDados();
    
}                

}
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner dados = new Scanner(System.in);
System.out.println("\t\t-----------------------$-------------------------");
System.out.println("\t\t--------------------WELCOME----------------------");
System.out.println("\t\t-----------------------$-------------------------");
System.out.println("\t\t--------------------BEMVINDO---------------------");
System.out.println("\t\t-----------------------$-------------------------");
System.out.println("NOVA LICITAÇÃO “);
System.out.println(”-------------- ");
System.out.println("CARO FUNCIONÁRIO PARA CRIAR UMA NOVA LICITAÇÃO PREENCHA OS DADOS ABAIXO: “);
System.out.println(”------------------------------------------------------------------------ ");
System.out.println("NÚMERO: ");
String numero = dados.next();
System.out.println("OBJETO: ");
System.out.println(“1)BENS E IMÓVEIS”);
System.out.println(“2)PRESTAÇÃO DE SERVIÇOS”);
System.out.println(“3)MATERIAL DE USO E CONSUMO\n”);
int objeto = dados.nextInt();
while((objeto < 1) || (objeto > 3))
{
System.out.println(“NÚMERO INVÁLIDO! POR FAVOR DIGITE UM VALOR ENTRE 1 E 3”);
System.out.println("OBJETO: ");
System.out.println(“1)BENS E IMÓVEIS”);
System.out.println(“2)PRESTAÇÃO DE SERVIÇOS”);
System.out.println(“3)MATERIAL DE USO E CONSUMO\n”);
objeto = dados.nextInt();
}
System.out.println("DESCRIÇÃO: ");
String descricao = dados.next();
System.out.println("TIPO: ");
System.out.println(“1)MELHOR PREÇO”);
System.out.println(“2)MEHOR TÉCNICA”);
System.out.println(“3)MELHOR TÉCNICA E PREÇO\n”);
int tipo = dados.nextInt();
while((tipo < 1) || (tipo > 3))
{
System.out.println(“NÚMERO INVÁLIDO! POR FAVOR DIGITE UM VALOR ENTRE 1 E 3”);
System.out.println("OBJETO: “);
System.out.println(“1)BENS E IMÓVEIS”);
System.out.println(“2)PRESTAÇÃO DE SERVIÇOS”);
System.out.println(“3)MATERIAL DE USO E CONSUMO\n”);
tipo = dados.nextInt();
}
EmpresaPublica licitacao = new EmpresaPublica(numero, objeto, descricao, tipo);
Especialista[] especialistas = new Especialista[3];
especialistas[0] = new Especialista(“Especialista1”, licitacao);
especialistas[1] = new Especialista(“Especialista2”, licitacao);
especialistas[2] = new Especialista(“Especialista3”, licitacao);
Fornecedor[] fornecedores = new Fornecedor[3];
fornecedores[0] = new Fornecedor(“Fornecedor1”, 1, licitacao);
fornecedores[1] = new Fornecedor(“Fornecedor2”, 2, licitacao);
fornecedores[2] = new Fornecedor(“Fornecedor3”, 2, licitacao);
int i = 0;
while(i < fornecedores.length)
{
if(fornecedores[i].avaliaParticipacao1() == true)
{
licitacao = new EmpresaPublica(fornecedores[i]);
System.out.println(”\t\tBEM VINDO " +fornecedores[i].getNome());
System.out.println("CARO FORNECEDOR PARA CRIAR UMA PROPOSTA PREENCHA OS DADOS ABAIXO: ");
System.out.println("PREÇO: ");
double preco = dados.nextDouble();
System.out.println("PRAZO: ");
double prazo = dados.nextDouble();
fornecedores[i].setPreco(preco);
fornecedores[i].setPrazo(prazo);

        }      
        else
        {
            if(fornecedores[i].avaliaParticipacao2() == true)
            {
                licitacao = new EmpresaPublica(fornecedores[i]);
                System.out.println("\t\tBEM VINDO  " +fornecedores[i].getNome());
                System.out.println("CARO FORNECEDOR PARA CRIAR UMA PROPOSTA PREENCHA OS DADOS ABAIXO: ");
                System.out.println("PREÇO: ");  
                double preco = dados.nextDouble();  
                System.out.println("PRAZO: ");     
                double prazo = dados.nextDouble();    
                fornecedores[i].setPreco(preco);                
                fornecedores[i].setPrazo(prazo);
            }
            if(fornecedores[i].avaliaParticipacao3() == true)
            {
                System.out.println("CARO FORNECEDOR O OBJETO DA LICITAÇÃO NÃO CORRESPONDE A SUA ATIVIDADE COMERCIAL");
                System.out.println("TEM CERTEZA QUE DESEJA ENVIAR SUA PROPOSTA? ");
                System.out.println("1)SIM");
                System.out.println("2)NÃO");
                int opcao = dados.nextInt(); 
                if(opcao == 1)
                {
                     licitacao = new EmpresaPublica(fornecedores[i]);
                     System.out.println("\t\tBEM VINDO  " +fornecedores[i].getNome());
                     System.out.println("CARO FORNECEDOR PARA CRIAR UMA PROPOSTA PREENCHA OS DADOS ABAIXO: ");
                     System.out.println("PREÇO: ");         
                     double preco = dados.nextDouble();  
                     System.out.println("PRAZO: ");         
                     double prazo = dados.nextDouble();                  
                     fornecedores[i].setPreco(preco);
                     fornecedores[i].setPrazo(prazo);
                     
                }    
                else
                {    
                     System.out.println("NÃO PARTICIPOU DA LICITAÇÃO: " +fornecedores[i].getNome());
                }            
            }        
        } 
        
     i++;
    }
    
    
   
  
   
}   

} [/code]

para que fique claro o entendimento dos que vierem aqui tentar ajudar (inclusive eu), tente editar o seu post e colocar todo o código entre as tags, como se recomenda aqui no GUJ.

ex:
[ code ] //(sem espaços entre os caracteres)
public class bla blabla{
int blablabla = 0;
}
[ /code ] //(sem espaços entre os caracteres)

fica assim:

public class bla blabla{
      int blablabla = 0;
}