Problemas com multiplos return's

Ola mais uma vez eu estou com problemas com multiplos return’s em meu codigo…

o método é mais ou menos assim

  public int checkDay( int day )
   {
    int dayPerMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    					  
    if( day > 0 && day <= dayPerMonth[ this.month ] )
     return day;
    System.out.prinln( "Dia invalido setando dia para: 1" );
    return 1;
    }

e com mais alguns returns no meio dele… pois bem o codigo sempre retorna o ultimo return do codigo… eu gostaria de saber o que fazer pois estou sem ideias ja :slight_smile:

Obrigado

ah sim… e tem outra se eu nao colocar um return fora de alguma estrutura condicional (no metodo mesmo) ele pede pra colocar… e se eu nao quiser como faco ?

Jboy, como vc mesmo declarou o seu metodo ele retorna um int , entao vc deve colocar condicoes nele para tal proposito
por exemplo:

public int geMes(int mes){

if (mes != null)
return mes;
// esse return é encoberto pela condicao por isso q vc
//precisa declarar um outro fora se ele é executado finish, nada mais e
//feito ok?

}else{
System.out.println(Invalido);
return 12;
}
// preciso retornar alguma coisa !!
return null;

Posso ter varios returns em meu codigo , vc so precisar pensar bem na logica para nao usa-los de forma inadequada!!
Desculpe a falta de imaginacao :wink:

voce ja tentou mostrar os valors de month e do array na tela?

voce esta contando os meses apartir de 0 em month? pq no array inicia em 0!

t+

estou contando sim… mas o problema disso é que quando eu coloco os returns ele sempre manda de volta o valor 1 e nao o valor achado… por exemplo
Ele recebe o dia 20 e ao inves dele receber o dia 20 de volta já checado e analisado ele retorna 1 sacou ?
Eu estou tentando setar variaveis private na classe pra poder depois com um método toString() retornar os valores já formatados.

Aparentemente deveria funcionar normalmente!
Mas será que o erro n está em alguma outra parte do código?

Seria bom vc colocar o código inteiro aki, pois o trecho q vc coocou esta certo!

Uma dica sobre estilo: normalmente, é considerado “feio” usar mais de um return no mesmo método. É possível escrever qualquer algoritmo usando apenas um return, e voce se perde bem menos :smiley:

Ah, outra dica: use um depurador - o Eclipse tem um ótimo :wink:

esse depurador do Eclipse nao é muito pesado?

Não mais que o próprio Eclipse :slight_smile:

Se vc tem uns 256mb de RAM, dá pra rodar numa boa :smiley:

me desculpem pelo tempo que eu nao postei nenhuma msg sobre o assunto. estive sem tempo.
pois bem vamos ao que interessa :slight_smile:

eu uso uma chamada de metodo da seguinte maneira:

Data d = new Data( 7, 10, 1986 );

sendo os valores dia mes e ano respectivamente.

O problema eh que quando eu chamo o metodo ele tem no construtor uma chamada para outro metodo que eh o metodo checkDay(); que é justamente esse metodo que eu transcrevi para o forum. So que esse metodo ele testa pelo mes em um vetor se o dia eh possivel para aquele mes. so que quando eu retorno o valor da variavel ele nao esta retornando gostaria de saber porque ai vai o metodo construtor

public Data( int day, int month, int year )
{
this.year = checkYear( year );
this.month = checkMonth( month );
this.day = checkDay( day );
}

e o metodo checa o dia e o retorna se estiver correto com o valor e com 1 se o valor nao estiver correto mas ele sempre esta retornando 1 por ser o ultimo return gostaria de saber uma opcao para mudalo.

valeu e tomara que seja a ultima msg sobre isso ne ? :stuck_out_tongue:

Seu método checkDay funcionou perfeitamente aki, provavelmente o erro esta em alguma outra parte do código. Aparentemente o mais provável é que o mes pode estar sendo setado para 0, por algum motivo.

Antes de vc chamar método checkDay, vc chama os métodos checkYear e checkMonth, talvez o erro possa esta em algum deles.

Ou talvez vc tenha se enrolado na utilização das variaveis globais e locais com o mesmo nome, é recomendado que vc evite isso ao máximo!

aki está o código que eu usei para testar seu método:

public class Teste {
   public int month;
	
   public int checkDay( int day ) { 
      int dayPerMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 

      if( day > 0 && day <= dayPerMonth[ this.month ] ) 
         return day; 
      
      System.out.println( "Dia invalido setando dia para: 1" ); 
      return 1; 
   } 

   public static void main(String args[]){
      Teste app= new Teste();
      app.month=10;
      System.out.println("Dia "+app.checkDay(7));
   }
}

Qualquer coisa grita!!! :wink:

pu$% que *#riu… hehe eu nao sei se eu fico com raiva pela besteira que era o erro ou se eu fico feliz por ter descoberto :stuck_out_tongue:

tem um metodo construtor no programa que eh o seguinte:

public Data( int day, int month, int year )
{
this.year = this.checkYear( year );
this.month = this.checkMonth( month );
this.day = this.checkDay( day );
}

Esta ultima linha do day tava primeiro so que como o metodo checkDay() precisa do month e ele n tinha sido inicializado entao ele sempre dava erro. Valeu bixo obrigado mermo :slight_smile: eh florida

ps. e realmente teve aquele ahhhhhhhhhhhhhhhh pooo… qnd achei o erro :stuck_out_tongue: