Missing return statement em boolean

Boa tarde senhores,
estou com um problema que realmente ja nao entendo mais o motivo dele dar isso.

vamos ao exemplo:

  boolean abreFecha(){
      for(int i=0;i<portas.length;i++){
          if(portas[i].situacao==true){
              return true;
          }
          else
          {
              return false;
          }
      }  
    }

missing return statemente nao acontece apenas quando o else nao tem com o que comparar? bom nao tenho muito com o que compara, boolean eh false e true certo ? entao o else ja sabe que tem que ser false? ou tenho que colocar else(portas[i].situacao==false){return false; }

o estranho que mesmo botando isso o erro sai, mas qnd vou para a classe main, ele volta a aparece o erro na abinha la em cima :S

alguem tem alguma ideia do que pode estar havendo ?

valeu!

  boolean abreFecha(){
      for(int i=0;i<portas.length;i++){
          if(portas[i].situacao){
              return true;
          }
      }  
      return false;
    }

Estou supondo que você quer retornar true se pelo menos uma das portas.situacao for true.

:oops: :oops:

que easy.

sim eh isso mesmo se for true retorna se nao pode deixar como ta mesmo :smiley:

estranho,
pelo meu entender daria certo, mas nao vai de form alguma e continua dando o mesmo erro.

boolean abreFecha() { for (int i = 0; i < portas.length; i++) { if (portas[i].situacao == true) { return true; } return false; } }

o que sera que pode estar havendo gente? :S net beans ?

Suponha que portas.length seja exatamente 0. O que ocorre é que o “for” não vai ser executado, e nesse caso vai haver o caso de um ponto do programa que não tem “return”.

Você copiou direito o meu código ou não?

bom uma coisa fiquei em duvida no seu codigo.
o if vai verificar com quem? nao tem nenhum == la :S
siginifica o padrao ?que ja vem true qnd cria?

Tá bom, é que o modo recomendado de testar variáveis booleanas não é compará-las com true ou false, mas sim usá-las diretamente (usando o operador ! caso necessário).

É que na verdade o “if” é um comando que recebe um valor booleano (true ou false); o operador “==” retorna true se ambas as coisas forem iguais, e false em caso contrário.

Isto que eu escrevi:

         if(portas[i].situacao){  
             return true;  
         } 

é equivalente ao que você escreveu:

         if(portas[i].situacao == true){  
             return true;  
         } 

assim como isto aqui:

         if( ! portas[i].situacao){  
             return false;  
         } 

é equivalente a isto aqui:

         if(portas[i].situacao == false){  
             return false;  
         } 

ahhh sim :smiley: agora sim entendi melhor, vou anotar isso!hehe :smiley:

Do jeito que você fez, na primeira comparação falsa ele sai do for e já retorna false direto.
Do jeito que o Thingol fez, ele só sairá do for e retornará false se a situação de absolutamente todas as portas for false.

É bom sempre pensar nesses casos:

“tem alguma forma de meu método não entrar no meu if/for/while?”

Caso a resposta seja sim, deve-se ter o retorno fora desses controles de fluxo, pra garantir que alguma coisa seja retornado pelo método