Tem como fazer isso em um método?

3 respostas
E

Estou implementando um trabalho e surgiu uma dúvida:
O método que eu estou implementando é o seguinte:

//metodo executado pelo produtor
    public Object produz(Object item){
        //insere elemento do buffer
        while (qtde==TAMANHO_BUFFER)
            ;//não faz nada
        if (habilita) {
            while (habilita) {
                habilita = false;
                qtde++;
                buffer[entrada]=item;
                entrada=(entrada+1)%TAMANHO_BUFFER;
                return item;
            }
            habilita = true;
        }
    }

//metodo executado pelo consumidor
    public Object consome(){
        //retira o elemento fo buffer
        while(qtde==0)
            ;//não faz nada
        if (habilita) {
            while (habilita) {
                habilita = false;
                qtde--;
                Object item = buffer[saida];
                saida=(saida+1)%TAMANHO_BUFFER;
                return item;
            }
            habilita = true;
        }
    }

Do jeito que está agora o java está acusando dois erros na compilação. Os dois são referentes ao return item que eu coloquei dentro do laço de repetição. Se eu tiro ele do laço e coloco fóra, o java diz "cannot resolve symbol. Symbom = variable item.

Pois então, existe alguma outra forma de eu implementar isto?

Desde já agradeço

3 Respostas

M

Poisé… item é uma variavel criada dentro do laço, ou seja, ela só existe ali dentro. Quando voce põe um ‘return item;’ fora do laço, dá esse erro pq item já não existe mais naquele ponto…
vc poderia declarar a variavel item antes do laço, assim: Object item = null;
ele cria a variavel e a inicializa com null, daí dentro do laço vc faz as operações que quiser com ela e, ao sair do laço, ela vai preservar o valor que lhe foi atribuído por ultimo…

_

É aconselhável fazer realmente o que mmpaulo disse, mas nao por causa da variavel, mas também por causa do comando return, pois o compilador identifica na condicao if a probabilidade dos comandos nao serem executados, o que dá um retorno nao existente…
Declare a variavel que será retornada antes de qualquer loop ou condicao como null, e apos a execucao coloque o comando return a variavel, pois retornara ou null, ou as alteracoes do laco ou condicoes

Espero ter ajudado()

E

Vou tentar.

Obrigado pelas dicas.

Criado 6 de novembro de 2004
Ultima resposta 6 de nov. de 2004
Respostas 3
Participantes 3